C中奇怪的工作循环
Strange working cycle in C
int n = 0;
int temp = 0;
while ((temp != 1) || (n <= 0)){
puts("enter array count");
temp = scanf("%d", &n);
printf("\n%d\n", temp);
}
我需要检查输入值是否必须是整数并且 > 0。
scanf
returns 成功设置值的计数,如果它不是整数,它将 return 0.
所以问题是,当我输入除数字以外的任何字符时,它开始未完成的循环
为什么?
当您为 scanf("%d", &n);
输入无效的内容(例如字符)时,scanf
失败,returns 0,并且 将无效数据保留在stdin
。在下一次迭代中 scanf
发现此无效数据在 stdin
中占主导地位,再次失败并重复此过程。
修复方法是在循环的每次迭代中清除 stdin
。添加
int c;
while((c = getchar()) != '\n' && c != EOF);
或
scanf("%*[^\n]");
scanf("%*c");
在 scanf
之后清除 stdin
。
int n = 0;
int temp = 0;
while ((temp != 1) || (n <= 0)){
puts("enter array count");
temp = scanf("%d", &n);
printf("\n%d\n", temp);
}
我需要检查输入值是否必须是整数并且 > 0。
scanf
returns 成功设置值的计数,如果它不是整数,它将 return 0.
所以问题是,当我输入除数字以外的任何字符时,它开始未完成的循环
为什么?
当您为 scanf("%d", &n);
输入无效的内容(例如字符)时,scanf
失败,returns 0,并且 将无效数据保留在stdin
。在下一次迭代中 scanf
发现此无效数据在 stdin
中占主导地位,再次失败并重复此过程。
修复方法是在循环的每次迭代中清除 stdin
。添加
int c;
while((c = getchar()) != '\n' && c != EOF);
或
scanf("%*[^\n]");
scanf("%*c");
在 scanf
之后清除 stdin
。