2012-03-19 82 views
0
#include<iostream> 
#include<vector> 
#include<stdexcept> 
#include<stdio.h> 

using namespace std; 

void keep_window_open() 
{ 
    cin.clear();  //clear badbit flag 
    cin.sync();  //clear stdin stream 

    cout << "Please enter a character to exit\n"; 
    char ch; 
    cin >> ch; 
    cout <<ch <<endl; 
    return; 
} 

int main() 
try{ 
    vector<int> v; 
    int x; 

    while(cin>>x) 
    { 
     v.push_back(x); 
    } 
    for(int i=0;i<=v.size();i++) 
     cout<<"v["<<i<<"]=="<<v.at(i)<<endl; //out of range 

}catch (exception& oor) { 
    cerr << "Out of Range error: " << oor.what() << endl; 
    keep_window_open(); 
    return 1; 
}catch(...){   
    cerr<<"exception :something went wrong\n"; 
    return 2; 
} 

上面的代碼是爲了練習C++異常處理函數。如何清除標準輸入流

但是,在清除Ubuntu 11.04下的標準輸入流點時,程序無法正常運行,但在代碼塊中的Windows下運行良好。怎麼了?

此外,爲什麼「fflush(stdin);」不能取代「cin.clear(); cin.sync();」?如果有其他方法來清除流?

感謝您的幫助!

+0

爲什麼你想這樣做? – 2012-03-19 01:24:38

+0

你爲什麼想這樣做?我不認爲存在一個好的,更不用說便攜式方法來「清除」STDIN,除了讀取所有數據。 – 2012-03-19 01:25:08

回答

0
+0

你知道爲什麼我的代碼可以在Codeblock中的Windows下正確運行,但是在Linux下運行錯誤,都使用GNU GCC編譯器?這個問題困擾了我很長一段時間。謝謝你的幫助! – city 2012-03-19 13:45:47

+0

@city,如果你還在想,我堅信這是因爲調用'cin.sync()'。這個函數並不保證能夠完成它所說的內容,而且我認爲它不適用於Linux。不幸的是,我知道沒有更好的定義明確的方式,不知道是否已經存在或不存在。 – chris 2012-12-21 08:47:45