在递归函数中使用putchar()对句子进行求逆
我是在读一些幻灯片的时候开始写这段代码的,只是没有解释的代码,我不理解invertSeq函数是如何工作的。尤其是getchar()在函数迭代期间不要求任何输入在递归函数中使用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;
#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
字符。请尝试使用调试器单步执行程序,您将获得启发。