2015-04-04 187 views
0

我希望用户输入的输入应该在0到100之间。如果他或她输入负数或大于100的数字或字符,循环必须被触发。我正在使用do-while循环来验证用户输入的输入。但是如果我输入一个字符,那么do while循环将被执行无限次。任何人都可以解释这是为什么发生!以及如何检查用户是否已经输入了char或int?使用scanf验证输入(检查输入是char还是int)

代码用C写成,用GCC编写。

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

“如果他或她进入负数或数超过100或字符时,循环必须被触发“你的意思是你的循环应该停止或开始? – Prudhvi 2015-04-04 22:27:43

+1

您需要清除输入缓冲区 – 2015-04-04 22:28:38

+0

@prudhvi是循环应该开始。但是当我输入一个字符时,“num:”语句被无限打印 – Anonymous 2015-04-04 22:31:45

回答

2

scanf()期待一个号码,如果它发现无效的输入(一些不匹配提供的格式),它会返回离开输入缓冲区的是,这意味着离开这个输入无效那里,然后循环条件评估为真,并且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

thanx ....它的工作! :) – Anonymous 2015-04-04 22:51:26

+0

你可以请给我一些参考从哪里我可以阅读更多关于输入缓冲区? – Anonymous 2015-04-04 23:03:14

+0

@匿名c-faq是一个很好的开始http://c-faq.com/stdio/index.html的地方 – 2015-04-04 23:18:55