C 迷失在递归中如何反转打印用户输入的单个字符并将其相乘

C 迷失在递归中如何反转打印用户输入的单个字符并将其相乘,c,recursion,C,Recursion,抱歉说得含糊不清,但我只是无能为力,在这上面坐了4个小时:| #include <stdio.h> int temp (int count) { int j = 0; char c; printf("Enter a char\n"); do { c = getchar(); } while(c=='\n'); if (c == 'x') return; temp(count+1)

抱歉说得含糊不清,但我只是无能为力,在这上面坐了4个小时:|

#include <stdio.h>

int temp (int count)
{
    int j = 0;
    char c;
    printf("Enter a char\n");
    do
    {
        c = getchar();
    }
    while(c=='\n');
    if (c == 'x')
        return;
    temp(count+1);
    for (j=0;j <count+1;j++)
    putchar(c);
    printf("\n");
    return count;
}


int print_in_reverse()
{
    int count = 0;
    temp(0);
    printf("%d\n" , count);

}
#包括
内部温度(内部计数)
{
int j=0;
字符c;
printf(“输入字符”);
做
{
c=getchar();
}
而(c=='\n');
如果(c='x')
返回;
温度(计数+1);

对于(j=0;j您离目标太近了。如果您将
count
作为参数传递,则在更深的递归中会得到更大的值。将其移动到返回,以便在更深的递归中得到更小的值

#include <stdio.h>

int temp ()
{
    int j = 0;
    int count;
    char c;
    printf("Enter a char\n");
    do
    {
        c = getchar();
    }
    while(c=='\n');
    if (c == 'x')
        return 0;
    count = temp(); /* Recursive call. */
    for (j=0;j <count+1;j++)
        putchar(c);
    printf("\n");
    return count+1; /* Return an increased count. */
}

int print_in_reverse()
{
    int count = 0;
    count = temp();
    printf("%d\n" , count);

}
#包括
内部温度()
{
int j=0;
整数计数;
字符c;
printf(“输入字符”);
做
{
c=getchar();
}
而(c=='\n');
如果(c='x')
返回0;
count=temp();/*递归调用*/

对于(j=0;j
print(“%dn”,temp(0);)
,您正在主要打印
count=0
。了解范围,count有局部范围,但它仍然不起作用…通常我的结果与我需要的相反;(@user3445443他只是想引用那一行,而不是告诉你把它改成他写的。他只是在写的时候打错了字,这就是为什么它和你的不同。在
print_In_reverse()中)
,您定义一个变量
count
,并将其设置为
0
,然后打印出来,而不在其间进行任何更改。结果只能是
0
。您需要意识到
print\u in\u reverse()
中的
count
temp()中的不同
。在检查
c==“x”
时,
c
的值是一个换行符-检查前的
do
循环强制执行该换行符。此外,打开编译器警告。例如,当输入以
x
结束时,返回值不带值。您也不跟踪递归深度,b因为您不使用来自
temp
@MOehm的结果,do循环强制执行相反的操作:它将在(c=='\n'时循环
,所以c在退出时不能
\n
谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生先生!谢谢你,好心的先生!