使用scanf验证输入(检查输入是char还是int)

时间:2015-04-04 22:15:49

标签: char int scanf

我希望用户输入的输入应该在0到100之间。如果他或她输入一个负数或大于100的数字或一个字符,则必须触发循环。我正在使用do-while循环来验证用户输入的输入。但是如果我输入一个字符,do while循环将被无限次执行。谁能解释为什么会这样呢!以及如何检查用户是否输入了char或int?

代码在C中书写并使用GCC进行编译。

int num;
do
{
    printf("num :");
    scanf("%d", &num);
}
while(num<0 ||  num>=100);

1 个答案:

答案 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;
}