由于 scanf 失败,getchar 无法读取

getchar having trouble reading due to scanf fail

#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()

+ 是开始浮点值的有效字符,因此 scanf 会在失败前使用它,因为 +.

之后没有数字

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

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