看个C++关于输入流的条件状态的程序
#include <iostream>
using namespace std;
std::istream& get(std::istream &in)
{
int ival;
while (in>>ival,!in.eof())//注意逗号表达式,前一个的返回值被忽略了
{
if (in.bad())//出现系统级故障
{
throw std::runtime_error("IO stream corrupted");
}
if (in.fail())//出现可恢复错误
{
std::cerr<<"bad data, try again/n";
in.clear();//恢复流
in.ignore(200,' ');//跳过类型非法的输入项
continue;
}
//读入正常
std::cout<<ival<<" ";
}
in.clear();
return in;
}
已经有了in.clear(),为什么还要加个in.ignore(200,' '),作用是什么?谢谢 C++ iostream in.ignore
[解决办法]
in.fail()为真,很可能是遇到了非法输入,比如要求整数而你却输入了字符abc。由于输入失败,abc依然留在缓冲区中,如果不ignore,你下次输入还会遇到它,然后就又fail。
[解决办法]
clear清除流的错误状态, 但输入的错误字符还在缓冲区中
cin.ignore(200,' ' );//清除流空格之前的字符