首页 新闻 搜索 专区 学院

关于C++ primer 第8章标准IO库习题8.3和8.4的问题。

0
悬赏园豆:10 [待解决问题]

如题,本人按如下方式实现程序:

#include<iostream>
#include<stdexcept>
using namespace std;

istream& inoperate(istream& in)
{
  int ival;
  while(in>>ival, !in.eof())
  {
    if(in.bad())
    {
      throw runtime_error("IO stream corrupted.");//抛出运行时错误:系统故障
    }
    if(in.fail())
    {
      //cout << in.failbit <<endl;
      cerr <<"bad data,try again."; //出现可恢复错误
      in.clear(); //恢复流
      //cout << in.failbit <<endl;
      in.ignore(200); //跳过类型非法输入项
      continue;
    }
    cout << ival<< " "; //读入正常,将结果输出
  }
  cout <<endl;
  in.clear();
  return in; //返回
}
int main(int argc,char **argv)
{
  double dval;
  inoperate(cin);
  cin >> dval;
  cout << dval << endl;
  system("pause");
  return 0;
}

遇到的问题是:如果输如不是int型数据,比如输入“1 2 3 4 a 12 34”或者“1 2 3 4 12.5 8 10”,输出结果为“1 2 3 4 bad data,try again.” 当继续输入数据,如22 11 34 56,没反应,按上面的说明,in.clear()不是恢复流么,为什么不能继续输入呢,而且main()中的cout没有执行啊。求高手指导!先谢了。

 

@hairen的主页 @hairen | 初学一级 | 园豆:192
提问于:2014-06-22 21:28
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册