2012-03-19 86 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