看个C++关于输入流的条件状态的程序

zhzh1126 2013-06-26 08:08:28
#include <iostream>  
using namespace std;
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/n";
in.clear();//恢复流
in.ignore(200,' ');//跳过类型非法的输入项
continue;
}
//读入正常
std::cout<<ival<<" ";
}
in.clear();
return in;
}

已经有了in.clear(),为什么还要加个in.ignore(200,' '),作用是什么?谢谢
...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhzh1126 2013-06-26
  • 打赏
  • 举报
回复
引用 1 楼 plainsong 的回复:
in.fail()为真,很可能是遇到了非法输入,比如要求整数而你却输入了字符abc。由于输入失败,abc依然留在缓冲区中,如果不ignore,你下次输入还会遇到它,然后就又fail。
in.clear不是已经对缓冲区进行清空了吗?
getmonyinfo 2013-06-26
  • 打赏
  • 举报
回复
clear清除流的错误状态, 但输入的错误字符还在缓冲区中

cin.ignore(200,' ' );//清除流空格之前的字符

短歌如风 2013-06-26
  • 打赏
  • 举报
回复
此外,楼主去把这个贴子删了吧,等有人回复你就删不掉了: 看看这个程序,这里ignore的作用? [C/C++ C++ 语言]
短歌如风 2013-06-26
  • 打赏
  • 举报
回复
in.fail()为真,很可能是遇到了非法输入,比如要求整数而你却输入了字符abc。由于输入失败,abc依然留在缓冲区中,如果不ignore,你下次输入还会遇到它,然后就又fail。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧