Runpire 发表于 2023-3-23 05:10:03

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

本帖最后由 Runpire 于 2023-3-23 05:11 编辑

《带你学C带你飞》

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

{:10_254:} 麻烦鱼友们先看代码,求解答问题在最下面 {:10_254:}

#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;
}

{:10_243:} 我也非常疑惑这题的一个思路,

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

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

dolly_yos2 发表于 2023-3-23 05:10:04

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

Runpire 发表于 2023-3-23 19:05:59

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

你说 后进先出我就大致能明白了,感谢!

Runpire 发表于 2023-3-23 19:09:39

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

{:10_254:}如果有空的话,还麻烦你能到我第二个贴看看,能以简单点的思维解答下我的困惑,是不是其实跟这个也差不多一个意思,非常感谢!
页: [1]
查看完整版本: C语言基础问题:反向打印用户输入的英文句子