不知道为什么只能输入不能输出
#include<stdio.h> void f()
char c=getchar();
if(c!='\0'){ c=getchar(); f();
printf("%c",c);}else{
return;}
int main(){
char c; f();
return 0;
}
#include<stdio.h>
void f()
{
char c=getchar();
if(c!='\n')
{
f();
printf("%c",c);
}
}
int main()
{
char c;
f();
return 0;
}
你这代码毛病多了
1.函数f没有括号呀,你代码都写函数外面了
2.if里不可以再写getchar,if前面已经getchar了,你每递归一次读2个字符,读多了
3.getchar要么阻塞(缓冲区里没有数据),要么就返回一个字符,它永远不会是\0,所以这是个无限递归
我暂且忽略你代码里的各种错误,认为你只是复制的时候格式乱了,你判断 '\0' 永远都不回走出循环,换成 '\n' 试试
另外,我也写了份,应该是你要的需求:
#include <stdio.h>
void reverse_string(void) {
char c = getchar();
if (c != '\n') {
reverse_string();
putchar(c);
}
}
int main() {
printf("输入字符串: ");
reverse_string();
putchar('\n');
return 0;
}
该回答引用ChatGPT
参考这个代码
#include<stdio.h>
void f()
{
char c=getchar();
if(c!='\0')
{
c=getchar();
f();
printf("%c",c);
}
else
{
return;
}
}
int main()
{
char c;
f();
return 0;
}
因为输入的字符不可能得到'\0'这个空字符, 它对应的ASCII码值为0,所以这个代码的if条件一直满足,然后会一直处于获取字符的状态;
可以把if的条件改为c!=EOF(Windows下是按下CTRL+Z,再松开,然后回车就能产生EOF信号),用这个来作为函数的终止条件,然后再调整下if分支的逻辑即可,修改如下:
参考链接:
#include<stdio.h>
void f(){
char c=getchar(); // 从输入获取一个字符
if(c!=EOF){// 如果没有产生EOF信号,则执行递归调用和打印输入的字符
// c=getchar();
f(); // 递归调用f()
if(c!='\n'){ // 去除换行,如果不去除换行,可以把这个if去掉
printf("%c",c); // 打印这个字符
}
}
//printf("%c",c);
}
int main(){
char c;
f();
return 0;
}