C ++ - 检查cin是否有错误

时间:2016-11-27 19:58:08

标签: c++ cin

如果用户输入错误,我有一个while循环重启。

do{
    cerr<<"Input the numbers divided by a space"<<endl;
    cin>>number1>>number2;
    hiba=(cin.fail() || number1<1 || number1>100 || number2<1 || number2>100);
    if(fail){
        getline(cin, sz);
        cerr<<"Wrong input"<<endl;
    }
}while(fail);

两个变量都是整数,如果数字低于0或高于100,它就可以工作,但如果用户输入一个字符,它就不起作用,因为它会启动无限循环。

2 个答案:

答案 0 :(得分:2)

试试这个

int main()
{
    int tanulokszama,versenyekszama;
    bool hiba;
    string sz;
    do{
        cerr<<"Adja meg az elsõ sort!"<<endl;
        cin>>tanulokszama>>versenyekszama;
        hiba=(cin.fail() || tanulokszama<1 || tanulokszama>100 || versenyekszama<1 || versenyekszama>100);
        if(hiba){
            cin.clear();
            cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
            //getline(cin, sz);
            cerr<<"Rossz adatot adott meg!"<<endl;
        }
    }while(hiba);
}

注意:

别忘了包含

 #include<limits> 

答案 1 :(得分:1)

您应该使用ignore()clear()功能清除流,忽略任何内容,直到&#39; \ n&#39;。

试试这个:

do{
    cerr<<"Adja meg az elsõ sort!"<<endl;
    cin>>tanulokszama>>versenyekszama;
    hiba=(cin.fail() || tanulokszama<1 || tanulokszama>100 || versenyekszama<1 || versenyekszama>100);
    if(hiba){
        cin.clear();//clear the error flags of the stream
        cerr<<"Rossz adatot adott meg!"<<endl;
        cin.ignore( 256, '\n');//ignore until '\n'
    }
}while(hiba);

甚至更好地包含限制头文件并使用以下内容:

#include <limits>//add this to your includes
do{
    cerr<<"Adja meg az elsõ sort!"<<endl;
    cin>>tanulokszama>>versenyekszama;
    hiba=(cin.fail() || tanulokszama<1 || tanulokszama>100 || versenyekszama<1 || versenyekszama>100);
    if(hiba){
        cin.clear();//clear the error flags of the stream
        cerr<<"Rossz adatot adott meg!"<<endl;
        cin.ignore( numeric_limits<streamsize>::max(), '\n');//extract anything until the '\n' occurs
    }
}while(hiba);