我喂给 stdin " 11 + 3"使用以下代码和
void main(void) {
int number;
printf("the first call : %d\n", scanf("%d", &number));
char ch = fgetc(stdin);
ungetc(ch, stdin);
printf("the second call : %d\n", scanf("%d", &number));
}
结果对我来说似乎很奇怪因为第二个 scanf()应该失败。仅供参考,我在Ubuntu 5.4.0-6ubuntu1~16.04.4下使用了gcc 5.4.0 20160609。
the first call : 1
the second call : 1
答案 0 :(得分:1)
因为第二个scanf()应该失败。
没有。你给它提供了完全有效的输入。
scanf解析输入,直到满足输入或直到它到达分隔符。
在你第一次打电话给scanf时,它解析" 11"作为数字11,然后结束,因为下一个数字不是输入满足的数字的一部分。
在你对scanf的第二次调用中,它解析" + 3"数字3,它是整数形式的正3的有效表达式。就像" -3"本来是负3号。
正如评论中提到的那样,传递" 11 + 3"会导致第二个scanf失败,因为它会尝试解析" +"作为整数(+之后的空格被计为分隔符)。