【问题标题】:Invalid input keeps popping out?无效输入不断弹出?
【发布时间】:2019-04-01 09:02:13
【问题描述】:

不知道是逻辑错误还是代码错误。我创建了一个菜单,在菜单中有一堆 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");
}
}
}

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

【问题讨论】:

  • 您对cin 工作原理的理解有误。特别是在无效输入上会发生什么。正在寻找一个好的副本,但很难找到。
  • 您也可以使用 switch case 更好地重写它。
  • 你能告诉我怎么做吗?我知道 switch case 但不知道如何在这种情况下应用。
  • @ImaginePowers switch 对非整数输入没有帮助。但除此之外只有switch (choice) { case 1: ... break; case 2: ... break; case 3: ... break; default: ... break; }
  • 可能重复 stackoverflow.com/questions/19696442/…。这是尝试和恢复的方法,不过我仍然更喜欢“老兄”的建议。

标签: c++


【解决方案1】:

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

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

【讨论】:

  • 一般来说这是最好的解决方案。如果您尝试处理非整数输入,则不要尝试读取整数然后恢复。不要对您的输入做出任何假设。
猜你喜欢
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多