gpt4 book ai didi

c - 为什么通过scanf()输入一个非预期的值类型会导致这个程序进入死循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:59 24 4
gpt4 key购买 nike

考虑以下代码片段:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com