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