64,647
社区成员
发帖
与我相关
我的任务
分享
你输入2.2就知道问题了,这个代码无法正确处理错误输入,因为错误数据不会从缓冲区中取走,
所以导致一直重复读取'.'造成了死循环。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int ival;
while( cin >> ival, !cin.eof())
{
if(cin.bad())
throw runtime_error("IO stream corrupted");
if(cin.fail())
{
cerr << "bad data,try again\n";
cin.clear(); //这样
cin.ignore(1); //并且掠过这个非法字节
continue;
}
cout<<ival<<endl;
}
return 0;
}
if(cin.fail())
{
cerr << "bad data,try again\n";
cin.clear(istream::failbit);
continue;
}
if(cin.fail())
{
cerr << "bad data,try again\n";
cin.clear(istream::goodbit);//istream::goodbit可以省略,,默认就是goodbt...
cin.ignore(1);//为什么要这一句,我也不是很清楚。等高手吧。或者再查查。
continue;
}