首页 > 解决方案 > 由于 scanf 失败,getchar 无法读取

问题描述

#include <stdio.h>

int main() {
    float f;
    char s;
    if (scanf("%f", &f) == 1) {
        printf("%f", f);
    }
    else {
        s = getchar();
        printf("'%c'", s);
    }
}

这适用于浮点数,当我输入“*”或“/”时。为什么这不适用于“+”和“-”?

 ./a.out 
*
'*' 

这是输出,这就是我想要的。但是在'+'的情况下

./a.out
+
'
'

这正在发生,我希望 '+' 成为输出。

似乎 scanf 的失败以某种方式干扰了 getchar()

标签: cstdio

解决方案


+是启动浮点值的有效字符,因此scanf将在失败之前使用它,因为 . 之后没有数字+

然后getchar将读取下一个字符,之后+\n换行符。

如果您想在输入中捕获不是有效浮点值的前导+(或-),例如"+\n"or "-xyz",那么您必须将其读取为字符串,然后在之后解析它,例如使用sscanf,并将其用作字符串如果它不会解析为浮点数。


推荐阅读