C++ 无效输入不断弹出?

C++ 无效输入不断弹出?,c++,C++,我不知道这是逻辑错误还是代码错误。我创建了一个菜单,菜单中有一堆if语句,如果用户输入不满足if或elseif语句,则转到else语句。我有这个问题,当我输入字母,这意味着无效,但它不断打印出无效的输入一遍又一遍,它不会回到以前的菜单。如何修复该错误 我已尝试删除系统(“CLS”),但它不起作用 #include <iostream> #include <cstdlib> using namespace std; int main() { while (tru

我不知道这是逻辑错误还是代码错误。我创建了一个菜单,菜单中有一堆if语句,如果用户输入不满足if或elseif语句,则转到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");
}
}
}
#包括
#包括
使用名称空间std;
int main()
{
while(true)
{
智力选择;

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


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

这是您理解
cin
工作原理的错误。特别是在无效输入时会发生什么。查找好的副本,但很难搜索。您可以使用g开关大小写。你能告诉我怎么做吗?我知道开关大小写,但不知道如何在这种情况下应用。@imagepowers
switch
对非整数输入没有帮助。但除此之外,
switch(选项){case1:…break;case2:…break;case3:…break;default:…break;}
。可能重复。这是一种尝试和恢复方法,但我还是喜欢dude建议的方法。一般来说,这是最好的解决方案。如果您试图处理非整数输入,请不要尝试读取整数,然后进行恢复。不要对您的输入做任何假设。