【发布时间】:2012-03-19 01:22:15
【问题描述】:
#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 下的 Codeblocks 下运行良好。怎么了?
另外,为什么是“fflush(stdin);”不能替换“cin.clear(); cin.sync();”吗?如果有其他方法可以清除流?
感谢您的帮助!
【问题讨论】:
-
你为什么要这样做?除了读取所有数据之外,我认为没有一种好的、更不用说可移植的方式来“清除”STDIN。