2012-11-28 35 views
-1

我得到了循環,並輸入類型爲int的初始提示,但是... while循環檢查!(cin >> [variable])是什麼?我在cplusplus.com上查看了cin的解釋,但我沒有看到它保存了任何值......它看起來只是檢查輸入的數字的數值,該如何檢查有效的整數輸入?這段代碼如何驗證整數輸入?

int number; 
. 
. 
. 
    cout<<"Please enter a number: "; 
    while (!(cin >> number)) 
    { 
     cin.clear(); 
     cin >> badinput; 
     cout <<"Input " << badinput << " is invalid, please enter a number: "; 
    } 

回答

1

operator >>在輸入流上返回對流的引用,而不是從流中讀取的東西。讀取的值放入參數引用的內容中,該值必須是左值。

iostream上的!運算符測試流上的失敗標誌 - 如果流中發生任何故障,它將返回true。對於輸入流,如果您試圖讀取整數(如此代碼所做的那樣),並且輸入看起來不像整數,則會設置失敗標誌。

因此,此代碼(試圖)將整數讀入number,然後測試失敗標誌。如果已設置,則清除故障標誌,讀取badinput(可能是字符串),打印消息並循環,嘗試讀取另一個整數。

所以只要格式化失敗,它就會循環直到獲得一個整數。如果還有其他一些更持久的失敗(例如,如果cin獲得EOF或關閉),它將永遠循環。

+1

謝謝!這對我的代碼不會在我的作業中爆炸很有幫助,但我不想使用我不明白的東西:D –

-1

在我看來,它會檢查是否輸入了正數。一個正數將是真實的,導致!number爲假並跳過循環。如果它不是輸入的正數,則它將爲假,導致!number爲真並進入循環。

+0

有迴應的評論將有助於避免未來的反對票。 – NickD

+0

我想這是downvoted,因爲它只是完全錯誤... –

+2

@NickD:你的解釋是錯誤的。一個數字是正數還是負數並不是真或假。按照慣例,0是錯誤的,除零以外的任何東西都是真的。因此,!7 =!-3 =!true = false且!0 =!false = true。嘗試使用'x'的許多不同值來調用此函數,包括-1,0和1:'void test(int x){if(x){printf(「%d:true!\ n」,x); } if(!x){printf(「%d:false!\ n」,x); }}' –