使用递归的c中的scanf与getchar

tvokkenx  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(133)

这是一段代码,用于"反向打印"在两种情况下输入的字符,一种使用scanf,另一种使用getchar。getchar给出正确答案,而scanf显示分段错误

#include <stdio.h>
void reverse()
{
    char ch;
    scanf("%c",&ch); /*or ch=getchar;*/
    if(ch==EOF){
        return;
    }
    reverse();
    printf("%c",ch);
}
int main()
{
    reverse();
    return 0;
} 
/*input -- code work    output -- krow edoc*/

有人能解释一下错误和幕后发生了什么吗?
谢谢大家!
scanf-分段错误getchar-正确答案

yyyllmsg

yyyllmsg1#

错误测试

当文件结束时,scanf("%c",&ch)返回EOF,而不是将ch设置为EOF
对照 * 预期目标 * 1(表示1次转换成功)检查返回值,而不是对照其他可能的返回值(如EOF)。

char ch;

//scanf("%c",&ch); /*or ch=getchar;*/
//if(ch==EOF){
if (scanf("%c",&ch) != 1) {

    return;
}

相关问题