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

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


料青山看我应如是
浏览 787回答 2
2回答

撒科打诨

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

米脂

得重新刷新缓冲区,清除缓冲区内容,同楼上
打开App,查看更多内容
随时随地看视频慕课网APP