关于C++标准IO库中的一个问题,望高人相助。

下面一段程序来自于《C++primer》第4版的248页#include<iostream>usingnamespacestd;voidmain(){intival;wh... 下面一段程序来自于《C++primer》第4版的248页
#include<iostream>
using namespace std;

void 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"<<endl;
cin.clear(istream::failbit);
continue;
}
}
}
我在VC6.0下运行该程序,当输入是int型变量时程序正确运行,但是输入为一个字符时,如‘a’,这个程序会陷入死循环,不断在窗口打印bad data,try again,请问为什么会陷入死循环呢?
另一个问题是:标准IO库中的cin.clear(istream::failbit)和cin.setstate(istream::failbit)到底有什么区别,为改写程序后发现无论调用cin.clear(istream::failbit)还是cin.setstate(istream::failbit),cin.fail()返回都为TURE?
展开
 我来答
Gnu_IsNot_Unix
2010-08-13 · TA获得超过381个赞
知道答主
回答量:52
采纳率:100%
帮助的人:47.3万
展开全部
#include<iostream>
using namespace std;

int main()
{
int ival;

//cout<<cin.good()<<cin.fail()<<endl;//监视

while(cin>>ival,!cin.eof()){
if(cin.bad())
cerr<<("IO stream corrupted");
if(cin.fail()){

cerr<<"bad data,try again"<<endl;

cin.clear(ios::goodbit );//这里注意是goodbit
//也可以是cin.clear();才能实现目的
//lz可以吧我中间用来测试的两行屏蔽打开,监视看看

//cout<<cin.good()<<cin.fail()<<endl;//监视

cin.ignore();
//注意这里也可以用 cin.sync()代替,
//目的就是吃掉'a',否则下次循环它还在
continue;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式