无效的输入不断弹出吗?

时间:2019-04-01 09:02:14

标签: c++

我不知道这是逻辑错误还是代码错误。我创建了一个菜单,菜单中有一堆if语句,如果用户输入不满足if或else if语句,则转到else语句。输入字母时我遇到这个问题,它表示无效,但它不断打印出无效的输入,并且一遍又一遍都不会在上一个菜单中返回。如何解决该错误?

我尝试删除系统(“ CLS”),但是它不起作用。

 #include <iostream>
 #include <cstdlib>
 using namespace std;

 int main()
{

while (true)
{
    int choice;
    cout<<"Menu\n\n\n";
    cout<<"1. Fruits\n";
    cout<<"2. Vegetables\n";
    cout<<"3. Exit\n\n";
    cout<<"Choice: ";
    cin>>choice;

if(choice == 1){
    system ("CLS");

    system ("PAUSE");
    system ("CLS");
}

else if(choice == 2){
    system ("CLS");

    system ("PAUSE");
    system ("CLS");
}

else if(choice == 3){
    return 0;
}

else if(choice > 3 || choice < 1 ){
    system ("CLS");
    cout<<"Invalid Input\n\n";
    system ("PAUSE");
    system ("CLS");
}

else{
    system ("CLS");
    cout<<"Invalid Input\n\n";
    system ("PAUSE");
}
}
}

它应该只打印出一个无效输入,然后返回菜单。

1 个答案:

答案 0 :(得分:1)

如果输入的内容无法解析为整数,则将其保留在输入缓冲区中。因此,下次您尝试读取输入时,它将一遍又一遍地读取完全相同的无效输入。

一种可能的解决方案是使用std::getline将整行读入std::string,然后使用例如std::stoi将字符串转换为整数。