读书人

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

发布时间: 2013-09-05 16:02:06 作者: rapoo

求助:一个简单而又费解的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() 为清除全部的位。

读书人网 >C++

热点推荐