鱼C论坛

 找回密码
 立即注册
查看: 1632|回复: 3

[已解决]C语言基础问题:反向打印用户输入的英文句子

[复制链接]
发表于 2023-3-23 05:10:03 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 Runpire 于 2023-3-23 05:11 编辑

《带你学C带你飞》

S1E34_递归 的课后作业例题:反向打印用户输入的英文句子  

麻烦鱼友们先看代码,求解答问题在最下面
#include <stdio.h>
// 反向打印用户输入的英文句子
void getInput();
void getInput(){
        int ch;
        ch = getchar();
//                获取一个无符号字符 
// 判断是否等于 回车了 (输入结束后才可回车)
        if(ch !='\n'){
//        if( (ch=getchar()) !='\n'){
                getInput();
        }else{
                printf("反向输出:");
//                putchar(ch); 
// 在这里写putchar是不行的 
        }
        putchar(ch);
//  字符输出函数 
//        printf("%d",ch); 
}
int main(void){
        printf("请输入需要反向操作的英文句子:");
        getInput();
//        putchar('\n');
//        表示输出换行符,即实现回车换行的功能 
        return 0;
}

我也非常疑惑这题的一个思路,

为什么 putchar(ch) 的位置要在分支同级,而不能在分支判断内 ? ? ?

为什么结果输出后不是依次获取的字符,而是可以反向输出字符了 ? ? ?

最佳答案
2023-3-23 05:10:04
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在递归向下的路径上读取并(隐式的)利用函数栈帧保存,在递归返回过程输出,后进先出自然逆序输出

最佳答案

查看完整内容

在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了 这是利用递归完成逆序的,在递归向下的路径上读取并(隐式的)利用函数栈帧保存,在递归返回过程输出,后进先出自然逆序输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-23 05:10:04 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在递归向下的路径上读取并(隐式的)利用函数栈帧保存,在递归返回过程输出,后进先出自然逆序输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-23 19:05:59 | 显示全部楼层
dolly_yos2 发表于 2023-3-23 09:05
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在 ...

你说 后进先出  我就大致能明白了,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-23 19:09:39 | 显示全部楼层
dolly_yos2 发表于 2023-3-23 05:10
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在 ...

如果有空的话,还麻烦你能到我第二个贴看看,能以简单点的思维解答下我的困惑,是不是其实跟这个也差不多一个意思,非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 00:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表