递归函数反序输出字符串

不知道为什么只能输入不能输出


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


img