如何清除stdin流

时间:2012-03-19 01:22:15

标签: c++ exception

#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下清除stdin流点时程序无法正常运行,但在Codeblocks的Windows下运行良好。怎么了?

此外,为什么“fflush(stdin);”不能代替“cin.clear(); cin.sync();”?如果有其他方法可以清除流?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)