2016-04-02 42 views
1

我有一個while循環打印一個整數提示。我想錯誤檢查用戶何時輸入字符,如'a'。但是,當我鍵入'a'時,它將永遠打印「輸入種子:種子必須是整數值,請再試一次」。雖然循環不等待scanf輸入(「%d」)

int getSeed() { 
    int scanned, seed; 

    while (scanned == 0) { 
     printf("Enter the seed: "); 
     scanned = scanf("%d", &seed); 
     if (scanned == 0) { 
      printf("Seed must be an integer, try again\n"); 
     } 
    } 
    return seed; 
} 

我如何獲得這個打印

Enter the seed: a Seed must be an integer, try again Enter the seed:

感謝。

編輯:解決了它,我添加了getchar();在scanf之後。

+2

[scanf not reading input]可能重複(http://stackoverflow.com/questions/5289542/scanf-not-reading-input) – FiReTiTi

+1

您的解決方案不會真正解決它。如果有人輸入,事情仍然會出錯,例如「aa」。如果你想讀一行然後解析它,編寫代碼來做到這一點。 –

回答

0

scanf檢查您的輸入字符,發現它與轉換說明符不匹配,因此它將其放回到輸入流中。
然後在你的代碼的while循環達到scanf一遍,上述過程再次發生(因爲你已經寫在輸入流中a仍然存在)

因此,一個更好的解決辦法是閱讀它作爲一個字符(或字符串),然後將其轉換爲整數。