首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单而又费解的C++ IO 有关问题

2013-09-05 
求助:一个简单而又费解的C++ IO 问题最近在看C++ Primer,其中有如下的代码,如果输入非整数,比如任意一个字

求助:一个简单而又费解的C++ IO 问题
最近在看C++ Primer,其中有如下的代码,如果输入非整数,比如任意一个字母,程序就会陷入无限循环,不停地打印"Invalid data! Please retry!"

#include <iostream>
using namespace std;

int main()
{
int a(0);
cout<<"Input an integer number:"<<flush;

while(cin>>a, !cin.eof())
{
if(cin.bad())
throw runtime_error("IO stream corrupted!");
if(cin.fail())
{
cerr<<"Invalid data! Please retry!"<<endl;
cin.clear(istream::failbit);
continue;
}
break;
}
cout<<"a="<<a<<endl;
return EXIT_SUCCESS;
}

[解决办法]
windows下 ctrl+z 
得到eof值,while循环就为假了跳出循环了!

cin.fail()函数是流的操作是否出错!出错则为真!
[解决办法]

 if(cin.fail())
        {
            cerr<<"Invalid data! Please retry!"<<endl;
cin.clear();//修复流
cin.ignore();//忽略原流中字符
            continue;
        }

[解决办法]
引用:
Quote: 引用:


 if(cin.fail())
        {
            cerr<<"Invalid data! Please retry!"<<endl;
cin.clear();//修复流
cin.ignore();//忽略原流中字符
            continue;
        }

但是为什么使用cin.clear(istream::failbit);就不行呢?


输入流有3个状态 eofbit failbit badbit
clear(failbit) 的意思是设置 failbit 为1,清除其余2个位。不是你想的把failbit设置为0
clear() 为清除全部的位。

热点排行