我希望用户输入的输入应该在0到100之间。如果他或她输入一个负数或大于100的数字或一个字符,则必须触发循环。我正在使用do-while循环来验证用户输入的输入。但是如果我输入一个字符,do while循环将被无限次执行。谁能解释为什么会这样呢!以及如何检查用户是否输入了char或int?
代码在C中书写并使用GCC进行编译。
int num;
do
{
printf("num :");
scanf("%d", &num);
}
while(num<0 || num>=100);
答案 0 :(得分:2)
scanf()
如果找到无效输入(不符合所提供的格式)会产生一个数字,它将返回原样保留输入缓冲区,这意味着将此无效输入留在那里,然后循环条件计算结果为true,scanf()
尝试再次读取一个数字,以找到与以前相同的无效输入,这将永远重复。
清理输入缓冲区将解决此问题,您可以像这样清理它:
#include <stdio.h>
void cleanBuffer(){
int n;
while((n = getchar()) != EOF && n != '\n' );
}
int main(int argc, char *argv[])
{
int num = -1;
do
{
printf("num :");
scanf("%d", &num);
cleanBuffer(); //we clean the buffer here
}
while(num<0 || num>=100);
return 0;
}