**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
10天前关闭。
Improve this question
int velikostVstupu=0;
while(scanf("%d", vstup+velikostVstupu)!=EOF){
velikostVstupu++;
if(velikostVstupu>2000){
printf( "Nespravny vstup.\n");
return 0;
}
}
这段代码应该在数组“vstup[2000]
“中输入不超过2000个int
值,但是我没有检查输入是否为int
,如果不是,它就在“if(velikostVstupu>2000)
“之后(我在这里检查是否超过2000)。
为什么?这背后的数学原理是什么?
2条答案
按热度按时间cwtwac6a1#
scanf()
可能无法读取数字并返回0
。除非输入缓冲区发生变化,否则它将永远这样做,直到达到计数限制。在该点之后,每个数组都将是未定义的。您还没有告诉我们该输入如何处理“跳过非数字”。当你读取
vstup == 2000
条目时,你会溢出数组,因为测试是在你已经读取了值之后(未定义的行为)。下面是一些运行示例:
dsekswqp2#
感谢@JonathanLeffler,我想我知道当输入非数字时会发生什么。它只读取非数字,直到非数字将其余部分留在缓冲区中。当下一个请求时,它忽略白色,他立即找到一个非数字,不取任何内容,并将缓冲区保留不变,但增加velikostVstupu。这种情况一直持续到velikostVstupu〉2000。