返回信息流c++ primer 第四版 248页的
为什么输入一个不符合要求的数之后,就反复的输出bad data, try again了
while的判断是个逗号表达式的话,不也应该要执行cin吗,感觉输入failbit之后就死循环了
#include <iostream>
using namespace std;
int main()
{
int temp;
while (cin>>temp, !cin.eof())
{
if (cin.bad())
{
throw runtime_error("IO stream corrupted");
}
if (cin.fail())
{
cerr<<"bad data, try again";
cin.clear(istream::failbit);
continue;
}
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #46951同步于 2010/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一段io流有关的代码
renne
2010/11/27镜像同步23 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
试过了
试过很多种东西了已经
曾经在while里把bad fail eof三个状态都输出
发现fail一次之后,fail自己会0 1跳变……好像是有谁又cin了的样子
感觉像是缓冲区清空的问题
if (cin.fail())
{
cout<<cin.bad()<<endl;
cout<<cin.fail()<<endl;
cout<<cin.eof()<<endl;
cin.clear();
cout<<cin.bad()<<endl;
cout<<cin.fail()<<endl;
cout<<cin.eof()<<endl;
continue;
}
【 在 a206206 (每天都被人超级鄙视的寂寞帝和悲剧帝) 的大作中提到: 】
: 你试试用无参数的clear
【 在 renne 的大作中提到: 】
: 试过了
: 试过很多种东西了已经
: 曾经在while里把bad fail eof三个状态都输出
: ...................
这个不用continue吧.....clear以后就正常了啊
这个continue不continue是一样的
不过书上代码是这样的我就照写上去了
但是结果,试试就知道
【 在 mmjinf001 (社会主义) 的大作中提到: 】
: 这个不用continue吧.....clear以后就正常了啊
【 在 renne 的大作中提到: 】
: 这个continue不continue是一样的
: 不过书上代码是这样的我就照写上去了
: 但是结果,试试就知道
: ...................
还真是诡异啊,调了一会,发现while条件中的cin》》temp从来没执行过,难道是clear函数出了问题