我用以下代码输入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() 应该失败了。在Ubuntu5.4.0-6 ubuntu1~16.04.4下使用gcc 5.4.0 20160609。
the first call : 1
the second call : 1发布于 2017-03-28 06:35:09
因为第二个scanf()应该失败了。
不是的。你给它提供了完全有效的输入。
scanf解析输入,直到输入满足或到达定界符为止。
在第一次调用scanf时,它将"11“解析为数字11,然后得出结论,因为下一个数字不是输入满意的数字的一部分。
在第二次对scanf的调用中,它将"+3“解析为数字3,这是整数形式的正数3的有效表达式。就像"- 3“代表负数3一样。
但是,正如注释中提到的那样,传递"11+ 3“将导致第二次扫描失败,因为它将尝试将"+”解析为整数(+后面的空格被计算为分隔符)。
https://stackoverflow.com/questions/43061959
复制相似问题