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

cin为什么会出现死循环, cin.clear(istream:failbit)不起作用

2013-07-08 
cin为何会出现死循环, cin.clear(istream::failbit)不起作用当输入非数值时,例如输入a,则出现死循环。在这

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;
}

热点排行