2012-10-02 27 views
0

我的問題是,如果發生錯誤,我不能重置cin的流。例如,如果我在輸入一個字符串時需要一個int,並且如果我清除了該流,那麼在下一次循環時,我仍然會達到cin.fail()-ifC++:cin.clear()不重置流

任何幫助?

我的代碼如下:

int main() 
{ 
    int i; 
    while(cin>>i,!cin.eof()) 
    { 
     if(cin.fail()) 
     { 
      cin.clear(); 
      continue; 
     } 
     cout<<i<<endl; 
    } 
    system("pause"); 
} 

BTW:有關信息,我使用的Visual Studio作爲一個IDE。

+0

你不需要'!cin.eof()'在你的循環表達式中,因爲'>>'操作符返回流,它可以在布爾中使用表達式。 –

+0

@JoachimPileborg除了在這裏,他只想循環,如果錯誤是不是由於EOF。 –

回答

5

那麼,字符串仍然存在,因爲你還沒有提取它。所以下次閱讀也會失敗。您需要使用cin.ignore跳過 的非法字符。

+0

嗯,我想我沒有使用它,因爲它不工作。你可以將它添加到我的示例代碼?我試着將它添加到if,above和under cin.clear()中,但無濟於事。 – Oliver

+0

編輯:通過尋找另一個線程使它工作。它適用於: 'cin.clear(); cin.ignore(numeric_limits :: max(),'\ n');' – Oliver

1

使用類似:

int i; 
while(cin>>i,!cin.eof()) 
{ 
    if(cin.fail()) 
    { 
     cin.clear(); 
     string dummy; 
     cin >> dummy; 
     continue; 
    } 
    cout<<i<<endl; 
} 

這將跳過一個單詞。如果你輸入類似derp10 20的東西,你會得到20.