问题描述
#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
,如果它不解析为浮点数,则将其用作字符串。