读书人

[]一段流状态的查询和控制代码

发布时间: 2012-02-27 10:00:22 作者: rapoo

[求助]一段流状态的查询和控制代码.
#include <iostream>
using namespace std;

void 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 ";
cin.clear(istream::failbit);
continue;
}
}
}

书上抄下来的,结果运行结果不是所期望的!运行下就知道了,期望输入整形值。
若遇到输入非整形值就提示出错并重新输入。
但是我输入为字符的时候就出现了无限循环!

点解,谢谢!


[解决办法]
cerr < < "bad data,try again ";
cin.clear(istream::failbit);
continue;
改成
cerr < < "bad data,try again ";
cin.clear();
cin.sync();
continue;

[解决办法]
本质原因是错误输入仍然保留在输入缓冲里,必须先清掉。

读书人网 >C++

热点推荐