#include <iostream>
std::istream& get(std::istream& in)
{
int ival;
while(in>> ival,!in.eof()){
if(in.bad())
throw std::runtime_error( "IO stream corrupted ");
if(in.fail()){
std::cerr << "bad data,try again ";
in.clear();
continue;
}
std::cout << ival << "(loop)";
}
in.clear();
return in;
}
using namespace std;
int main()
{
double dval;
get(cin);
//cin >> dval;
//cout << dval << "(outloop)" <<endl;
return 0;
}
问题:我输入int型的数是正常的,我输入非法的数后,它会一直循环bad data,try again只能按ctrl+c结束。为什么会循环呢,不是只打印一次错误信息,然后continue就接着输下一吗?
还有最后两句就是加了//的那两句,好像没什么用?(网上下的例子)
缓冲区的内容还在,加个in.sync():
in.clear();
in.sync();
得重新刷新缓冲区,清除缓冲区内容,同楼上