首页 新闻 搜索 专区 学院

c++中关于IO的问题,如下:

0
悬赏园豆:15 [已解决问题] 解决于 2012-09-12 20:08

#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就接着输下一吗?
还有最后两句就是加了//的那两句,好像没什么用?(网上下的例子)

@咸鱼的主页 @咸鱼 | 初学一级 | 园豆:180
提问于:2012-09-12 11:08
< >
分享
最佳答案
0

缓冲区的内容还在,加个in.sync():

in.clear();

in.sync();

收获园豆:10
向往-SONG | 老鸟四级 |园豆:4853 | 2012-09-12 12:38
其他回答(1)
0

得重新刷新缓冲区,清除缓冲区内容,同楼上

收获园豆:5
jyye | 园豆:207 (菜鸟二级) | 2012-09-12 14:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册