使用 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;
}
我希望用户输入的值应该在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;
}