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

Validating input using scanf (check whether input is char or int)

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

代码用 C 语言编写,并使用 GCC 编译。

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

scanf() 如果发现无效输入(与提供的格式不匹配的东西),则需要一个数字,它将 return 保留输入缓冲区原样,这意味着保留此无效输入在那里,然后循环条件评估为真并且 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;
}