2014-12-02 108 views
1

我有一個小程序,我想評估輸入。 N變量的輸入只能是1到2000之間的一個數字。現在,如果我輸入正確/不正確的數字,我寫的下面的代碼工作正常,但是當我輸入一些隨機字母時(我必須確保只有數字,所以我必須處理,如果有人放入信件),提示會寫出儘可能多的信件,我已經放入,我只希望它被放出一次。所以,如果我寫34,它的作品。如果我編寫3355453,則會檢查輸入,並提示用戶再次嘗試使用1到2000之間的數字。當我寫入字母'x'時,會檢查輸入並提示用戶再次嘗試輸入數字再次介於1到2000之間,但如果我編寫更多字母(例如xxxx),則提示會出現4次而不是1次。如果我輸入7個字母,propt出現7次。任何方式來解決這個問題?謝謝!cin.fail錯誤處理問題

do { 
    cout << "Please put in a number between 1 and 2000." <<  endl; 
    cin >> N; 

    if(cin.fail() || N<1 || N>2000){ 
    cin.clear(); 
    cin.ignore(); 
    } 
} while(cin.fail() || N<1 || N>2000); 

回答

1

更換cin.ignore()瓦特/ cin.ignore(INT_MAX, '\n');

+0

什麼樣的魔力,這是? :D謝謝,這究竟做了什麼?除了工作:D – 2014-12-02 22:06:06

+0

請看看文檔http://www.cplusplus.com/reference/istream/istream/ignore/。默認情況下,忽略調用忽略* one *字符或直到它遇到EOF,在我們的情況下,我們將忽略儘可能多的字符(MAX_INT足夠大),直到我們遇到/到達行尾符號('\ n')由用戶輸入。 – 2014-12-02 22:09:41