考虑以下代码片段:
int n;
int a[100];
int main()
{
printf("\nThis program will sort a given list of between 1 and 100 integers.\n\n");
int ready = 0;
while(!ready)
{
printf("How many integers are in your list? ");
scanf("%d",&n);
if(n>100)
{
printf("\n\nError:\tToo many integers.\n\tThis program can only handle up to 100 integers.\n\n\n");
}
else if (n<1)
{
printf("\n\nError:\tNot enough integers.\n\tThis program requires at least 1 integer to sort.\n\n\n");
}
else ready=1;
}
}
如果您在提示符处输入任何整数,它会按预期工作,但是如果您输入一个字符,它会开始不断输出:
How many integers are in your list?
Error: Too many integers.
This program can only handle up to 100 integers.
...
...
recurse over and over
显然它与 scanf() 函数有关,但我想知道导致此抽象以其方式泄漏的幕后原因。
我已经习惯了有漂浮物和救生衣的语言,我正在努力适应和 C 在游泳池更深的一端游泳。
最佳答案
如果您输入一个字符,则 scanf()
会失败,之后不会定义结果,而且输入不会被消耗并保留在缓冲区中递归地获取相同的值,从而导致您的 scanf()反复失败。
所以你应该这样做
if(scanf("%d",&n) == 1)
// Do your stuff
关于c - 为什么通过scanf()输入一个非预期的值类型会导致这个程序进入死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28368267/