求c语言大神详细说明这个程序(输入字符串,然后反向输出)

2025-02-26 21:53:26
推荐回答(2个)
回答1:

//原程序:
#include 
void reverse()
{
    char c;                    
    if((c = getchar()) != '\n') /*c =getchar()先把键入的一个字符赋值给c,再判断                                   键入的是否为回车*/
        reverse();              /*若当前键入不是回车,再次调用一次自定义函数,注                                  意此时第一次调用还没有结束;若当前键入回车,即                                   输入字符串结束符时,则无任何操作,进入下一轮判                                  断*/
    if(c != '\n')               /* 如果当前不是回车就输出当前的字符。由于最后一                                    个字符必定是回车所以最后一次调用相当于无任何                                     操作,此时函数并不是结束,而是返回上一层调用                                    点即倒数第二次调用,去执行上次未执行的语句if                                    (c != '\n') putchar(c);这时就输出了倒数第一                                     个非空字符,此后再返回倒数第三次调用的断点输                                   出倒数第二个非空字符,以此类推……实现倒序输                                    出。*/
        putchar(c);
}

void main()
{
    reverse(); //程序开始,第一次调用自定义函数reverse()
    printf("\n");

}

//我的程序:
#include
#include
void main()
{
 char a[100];
 int i,j;
 printf("请输入一个字符串:");
 scanf("%s",&a);
 j=strlen(a);
 printf("它的倒序字符串为:");
 for(i=j-1;i>=0;i--)
   printf("%c",a[i]);
 printf("\n");
}

回答2:

reverse()函数有递归调用,当你输入abcdef时,

第1次调用:c=a,
第2次调用:c=b,
第3次调用:c=c,
第4次调用:c=d,
第5次调用:c=e,
因为前面的调用必须在后面的调用执行完后才执行putchar(c);所以

最后一次调用并输出:e,然后返回上一层调用,输出d,再返回上一层调用,输出c,依次类推,