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:} 为什么结果输出后不是依次获取的字符,而是可以反向输出字符了 ? ? ?
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在递归向下的路径上读取并(隐式的)利用函数栈帧保存,在递归返回过程输出,后进先出自然逆序输出 dolly_yos2 发表于 2023-3-23 09:05
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在 ...
你说 后进先出我就大致能明白了,感谢! dolly_yos2 发表于 2023-3-23 05:10
在 else 内部岂不是只有当 ch 是换行符时才会输出,这样就无法输出其它字符了
这是利用递归完成逆序的,在 ...
{:10_254:}如果有空的话,还麻烦你能到我第二个贴看看,能以简单点的思维解答下我的困惑,是不是其实跟这个也差不多一个意思,非常感谢!
页:
[1]