我不知道这是逻辑错误还是代码错误。我创建了一个菜单,菜单中有一堆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");
}
}
}
它应该只打印出一个无效输入,然后返回菜单。
答案 0 :(得分:1)
如果输入的内容无法解析为整数,则将其保留在输入缓冲区中。因此,下次您尝试读取输入时,它将一遍又一遍地读取完全相同的无效输入。
一种可能的解决方案是使用std::getline
将整行读入std::string
,然后使用例如std::stoi
将字符串转换为整数。