C - 检查CIN是否有错误

C++ - Check cin for mistakes

本文关键字:是否 有错误 CIN 检查      更新时间:2023-10-16

我有一个段循环,如果用户输入错误,则重新启动。

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或以上的数字,则可以工作,但是如果用户输入字符,则它不起作用,因为它启动了无限循环。

尝试此

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> 

您应该使用ignore()和clear()函数清除流并忽略任何东西,直到' n'。

尝试以下操作:

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