在递归函数中使用putchar()对句子进行求逆

在递归函数中使用putchar()对句子进行求逆,c,recursion,C,Recursion,我是在读一些幻灯片的时候开始写这段代码的,只是没有解释的代码,我不理解invertSeq函数是如何工作的。尤其是getchar()在函数迭代期间不要求任何输入 #include <stdio.h> void invertSeq(void); int main() { printf("Insert seq: \n"); invertSeq(); return 0; } void invertSeq(void){ int c;

我是在读一些幻灯片的时候开始写这段代码的,只是没有解释的代码,我不理解invertSeq函数是如何工作的。尤其是getchar()在函数迭代期间不要求任何输入

#include <stdio.h>

void invertSeq(void);

int main() {
    printf("Insert seq: \n");
    invertSeq();
    return 0;
}

void invertSeq(void){
    int c;
    c = getchar();
    if(c == '\n'){
        printf("Inverted seq: ");
        return;
    }
    invertiSeq();
    putchar(c);
    return;
}
#包括
无效(无效);
int main(){
printf(“插入序号:\n”);
invertSeq();
返回0;
}
void invertSeq(void){
INTC;
c=getchar();
如果(c=='\n'){
printf(“倒序:”);
返回;
}
invertiSeq();
普查尔(c);
返回;
}

我将尽可能简单地解释这一点:当C程序中的一个函数调用另一个函数(甚至调用它自己)时,它必须“等待”它调用的函数完成其代码的执行,然后再继续执行其余的指令。因此,在这种情况下:

1. void invertSeq(void){
2.        int c;
3.       c = getchar();
4.        if(c == '\n'){
5.           printf("Inverted seq: ");
6.           return;
7.       }
8.        invertiSeq();
9.        putchar(c);
10.        return;
11.   }

main()
调用
invertSeq()
时,执行第2-7行上的指令,然后调用
invertSeq()
。在此期间,已读取输入的第一个字符,如果该字符不是
\n
,则调用
invertSeq()
(第8行)。在执行第9行和第10行的指令之前,最近调用的
invertSeq()
必须执行其指令。现在,如果输入的下一个字符不是
\n
,则再次调用
invertSeq()
(请记住,此时已读取输入的第二个字符)。执行前几行的指令后,
invertSeq()
在第8行上多次调用自身的过程将重复,直到从输入中读取
\n
。发生这种情况时,调用的“last”
invertSeq()
(从输入中读取
\n
的那一个)执行第5行和第6行的指令,然后打印“inverteseq:”并终止。调用的“倒数第二个”
invertSeq()
(读取字符串最后一个字符的那一个)通过在第9行执行
putchar(c)
打印最后一个字符,并在第10行执行
return;
后终止。此过程一直持续到“every”
invertSeq()
执行第9行和第10行的指令,从而以相反的顺序打印字符串。

我将尽可能简单地解释这一点:当C程序中的一个函数调用另一个函数(甚至它自己)时,它必须“等待”对于它调用的函数,在继续执行其余指令之前完成其代码的执行。因此,在本例中:

1. void invertSeq(void){
2.        int c;
3.       c = getchar();
4.        if(c == '\n'){
5.           printf("Inverted seq: ");
6.           return;
7.       }
8.        invertiSeq();
9.        putchar(c);
10.        return;
11.   }

main()
调用
invertSeq()
时,执行第2-7行上的指令,然后调用
invertSeq()
。在此期间,已读取输入的第一个字符,如果该字符不是
\n
,则调用
invertSeq()
(第8行)。在执行第9行和第10行上的指令之前,最近调用的
invertSeq()
必须执行其指令。现在,如果输入的下一个字符不是
\n
,则再次调用
invertSeq()
(请记住,此时已读取输入的第二个字符)。在执行前几行的指令后,
invertSeq()
在第8行上多次调用自身的过程将重复,直到从输入中读取
\n
。发生这种情况时,调用“last”
invertSeq()
(从输入中读取
\n
的过程)执行第5行和第6行的指令,打印“倒序:”并终止。调用的“倒数第二个”
invertSeq()
(读取字符串最后一个字符的那个)通过执行
putchar(c)打印最后一个字符
在第9行,并在第10行执行
return;
后终止。此过程一直持续到“every”
invertSeq()
执行第9行和第10行的指令,从而以相反的顺序打印字符串的字符。

getchar()
不“询问”用于输入。它只返回已缓冲的输入的下一个字符。如果键入一行5个字符,则每次调用
getchar()
都将返回其中一个字符(按键入顺序),然后下一个调用将返回结束该行的
\n
字符。尝试使用调试器单步执行该程序,您将得到启发。
getchar()
不会“请求”输入。它只返回已缓冲的下一个输入字符。如果键入一行5个字符,则每次调用
getchar()
将返回其中一个字符(按您键入的顺序),然后下一次调用将返回结束该行的
\n
字符。请尝试使用调试器单步执行程序,您将获得启发。