2011-02-04 137 views
0

在以下代碼中,如果用戶輸入的內容不是int,程序將進入無限循環。爲什麼會發生這種情況,我該如何解決這個問題?爲什麼我的cin循環永遠不會結束?

#include <iostream> 
#include <string> 
using namespace std; 


int main() 
{ 
    int i; 
    char str[100]; 
    while (!(cin >> i)) 
    { 
     gets(str); 
     cout << "failure read!" << endl; 
    } 

    cout << "successful read!" << endl; 
    return 0; 
} 
+1

什麼你想幹什麼? – 2011-02-04 19:22:14

+0

什麼不正確?請具體說明。 – birryree 2011-02-04 19:23:33

+0

請以問題的形式重申您的問題。 – tylerl 2011-02-04 19:23:51

回答

4

清除錯誤狀態:

int main() 
{ 
    int i; 
    char str[100]; 
    while (!(cin >> i)) 
    { 
     cin.clear(); 
     cin.getline(str,100); 
     cout << "failure read!" << endl; 
    } 

    cout << "successful read!" << endl; 
    return 0; 
} 
1

我認爲你想用一個if語句替換while循環,用這個循環,你會在發生錯誤時不斷從cin讀取數據。但是,cin的結構是這樣的,在發生錯誤之後,您必須手動清除錯誤狀態,並且由於您沒有這樣做,因此會進入無限循環。使用if語句試圖讀取一個值,然後讓你知道它是否成功。

此外,這真的不是從cin讀取的好方法。這是脆弱的,任何無效的輸入可以完全取消你的程序,因爲獲取本質上是不安全的。爲了更安全,更可靠的方式來獲得在C++中輸入的討論,看看http://www.stanford.edu/class/cs106l/course-reader/Ch3_Streams.pdf