cin为何会出现死循环, cin.clear(istream::failbit)不起作用
当输入非数值时,例如输入a,则出现死循环。
在这一判断条件if(cin.fail()),问题出现在那?(编程环境为VS 2012)
int main()
{
int val;
while(cin>>val,!cin.eof())
{
if(cin.bad())
{
cerr<<"bad,error!"<<endl;
exit(-1);
}
if(cin.fail())
{
cerr<<"fail,illegal vale,try again!"<<endl;
cin.clear(istream::failbit);
continue;
}
if(cin.good())
{
cerr<<"good"<<endl;
}
}
return 0;
} cin死循环 cin.fail() ?cin.clear()
[解决办法]
while(cin>>val
[解决办法]
!cin.eof())
{
if(cin.bad())
{
cerr<<"bad,error!"<<endl;
exit(-1);
}
if(cin.fail())
{
cerr<<"fail,illegal vale,try again!"<<endl;
//cin.clear((istream::failbit);
cin.setstate(istream::eofbit);
continue;
}
if(cin.good())
{
cerr<<"good"<<endl;
}
}
设置失败的状态就可以了。。
[解决办法]
例如输入a,则出现死循环。
----- 你还需要将已经输入的a弄掉,否则a还一直在那里被你循环读
[解决办法]
# include <iostream>
using namespace std;
int main()
{
int val;
while (cin >> val, !cin.eof())
{
if (cin.bad())
{
cerr << "bad, error!" << endl;
exit(-1);
}
if (cin.fail())
{
cerr << "fail,illegal vale,try again!" << endl;
cin.clear();
string tmp;
getline(cin, tmp);
continue;
}
if(cin.good())
{
cerr << "good" << endl;
}
}
return 0;
}