首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++primer(4版)的状态流的查询与控制,该如何解决

2012-03-19 
C++primer(4版)的状态流的查询与控制在看 C++primer (4版时),测试了书上的一个例子,如下:intmain(){

C++primer(4版)的状态流的查询与控制
在看 < <C++primer> > (4版时),测试了书上的一个例子,如下:
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 "   < <   endl;;
cin.clear(istream::failbit);   //reset   the   stream
continue;   //get   next   input
}
}
return   0;
}
输入一组整数肯定时没问题了,可输入,比如:10   20   test   30;死循环,不断输出:
bad   data,   try   again
程序的本意是通过while()循环不段读入cin,直到到达文件末尾或者发生不可恢复的读取错去为止.字符串test赋给int型ival导致istream::failbit为真,因此需重置流的状态,而continue书上说是get   next   input,可是通过显示bad   data,   try   again,说明流并没有读取下一个值,还是读取的那个错值,即test!

不懂,why?谢谢大家能看看!

[解决办法]
你试了没有?
[解决办法]
int main()
{
int ival;
while(cin > > ival, !cin.eof())
{
if(cin.bad())
{
throw runtime_error( "IO stream corrupted ");
cin.clear(ios_base::goodbit);
}
if(cin.fail())
{
cerr < < "bad data, try again " < < endl;;
cin.clear(ios_base::goodbit); //reset the stream
cin.ignore();
continue; //get next input
}
}
return 0;
}

热点排行