2015-04-04 225 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