如果用户输入错误,我有一个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,它就可以工作,但如果用户输入一个字符,它就不起作用,因为它会启动无限循环。
答案 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);