2013-10-20 109 views

回答

12

讓我們來看看這些獨立:

while(cin >> x) { 
    // code 
} 

這個循環,直觀,意思是「請繼續閱讀值從cinx,只要一個值可以被讀取,繼續循環。」只要讀取的值不是int,或者只要cin關閉,循環就會終止。這意味着該循環只能在x有效時執行。

在另一方面,考慮這個循環:

while(cin){ 
    cin >> y; 
    //code 
} 

聲明while (cin)手段「而在cin以前所有的操作都成功,繼續循環。」一旦我們進入循環,我們將嘗試讀入y的值。這可能會成功,否則可能會失敗。但是,無論哪種情況,循環都將繼續執行。這意味着一旦輸入無效數據或沒有更多數據要讀取,循環將使用舊值y再執行一次,因此您將需要多一次循環迭代。

你應該更喜歡這個循環的第一個版本到第二個。除非有有效的數據,它從不執行迭代。

希望這會有所幫助!

+0

「,只要可以讀取一個值,繼續循環」,即如果讀取成功,則執行循環體。 – dyp

3

不同的是,如果cin >> whatever計算結果爲假,你的第二個版本仍然運行循環的其餘部分。

我們假設cin >> whatever失敗。會發生什麼?

while(cin >> x){ 
    // code that DOESN'T RUN 
} 

while(cin){ 
    cin >> y; 
    //code that DOES RUN, even if the previous read failed 
} 
+0

我不這麼認爲,因爲我在網上裁判使用它,結果是錯誤的答案不是時間限制! –

0

cin >> x將輸入值存儲到x中。

至於while(cin),std::cin將返回一個布爾值是否設置錯誤標誌。因此,只要std::cin內部沒有設置錯誤標誌,就會繼續在while循環中。如果錯誤標誌找到end of file字符,或者未能讀取並存儲到該值,則可以設置錯誤標誌。

1
while(cin >> x){ 
    // code 
} 

這會讀取整數,直到遇到非整數,EOF或其他流錯誤。無論何時在循環中使用x,都會知道它已成功讀取。

while(cin){ 
    cin >> y; 
    //code 
} 

這會讀取整數,直到遇到非整數,EOF或其他流錯誤。但是,只有在讀取整數之前,該流才被檢查。當您在循環中使用y時,不能保證它已成功讀取。

相關問題