
关于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? 展开
#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? 展开
展开全部
#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;
}
}
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;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询