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

#include<stdio.h>voidreverse(){charc;if((c=getchar())!='\n')reverse();if(c!='\n')putc... #include <stdio.h>
void reverse()
{
char c;
if((c = getchar()) != '\n')
reverse();
if(c != '\n')
putchar(c);
}

void main()
{
reverse();
printf("\n");

}
展开
 我来答
J哥谈近视
2015-04-30 · 专注近视防控和视觉矫正
J哥谈近视
采纳数:325 获赞数:1483

向TA提问 私信TA
展开全部
//原程序:
#include <stdio.h>
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<stdio.h>
#include<string.h>
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");
}

zyz郑远征
2015-04-30 · TA获得超过1116个赞
知道小有建树答主
回答量:462
采纳率:100%
帮助的人:472万
展开全部
reverse()函数有递归调用,当你输入abcdef时,

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

最后一次调用并输出:e,然后返回上一层调用,输出d,再返回上一层调用,输出c,依次类推,
追问
还是有点不明白,

第1次调用:c=a,
第2次调用:c=b,
第3次调用:c=c,
第4次调用:c=d,
第5次调用:c=e,
第6次调用:c='\n'
之后执行

if(c != '\n')
putchar(c);
应该是什么都没有啊
希望解答,刚开始学c语言,很多不懂
追答
第六次因为c=‘\n’了,不满足while的条件,所以没执行while‘循环了,也就是没继续调用reverse()了, 而是执行下一句putchar(c);执行完之后返回上一层调用。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式