返回信息流#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int ival;
while(cin>>ival,!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 1;
}
以上代码为啥是死循环?
这是一条镜像帖。来源:北邮人论坛 / cpp / #32436同步于 2009/11/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教c++问题
buptbest
2009/11/30镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
这个问题以前有人问过。
请查看 http://forum.byr.edu.cn/wForum/disparticle.php?boardName=CPP&ID=30963&pos=1
恩,学习一下,以前没注意到这种解决方法^_^谢谢版主!
【 在 jokerlee 的大作中提到: 】
: cin.clear()一般何cin.sync()一起使用, 用于恢复流状态和清空缓冲区
谢谢了,但还是死循环啊。
【 在 jokerlee 的大作中提到: 】
: cin.clear()一般和cin.sync()一起使用, 用于恢复流状态和清空缓冲区
【 在 buptbest 的大作中提到: 】
: 谢谢了,但还是死循环啊。
【 在 jokerlee 的大作中提到: 】
: cin.clear()一般和cin.sync()一起使用, 用于恢复流状态和清空缓冲区
好像这样可以啊,我在我机器上试了,我用的是clear(),不是clear(ios::failbit);
谢谢了果然这样啊,但是这是为啥啊?
【 在 epavel 的大作中提到: 】
: 好像这样可以啊,我在我机器上试了,我用的是clear(),不是clear(ios::failbit);
【 在 buptbest 的大作中提到: 】
: 谢谢了果然这样啊,但是这是为啥啊?
因为clear failbit就不是这么写的,只清除failbit的写法是:
cin.clear(cin.rdstate() & ~istream::failbit);
[em17]
谢谢了,我是看的c++primer,看来书上有错误。
【 在 epavel 的大作中提到: 】
: 因为clear failbit就不是这么写的,只清除failbit的写法是:
: cin.clear(cin.rdstate() & ~istream::failbit);
: [em17]