使用默认情况下的C ++,Switch语句陷入无限循环

时间:2019-01-10 23:08:39

标签: c++

我最近刚刚学习了C ++,并创建了一个简单的RPG游戏进行练习。但是我遇到的一个问题是,switch语句在使用default情况时陷入无限循环。

我的代码本质上是这样的:

while (cond)
{
    //Ask user for input 1-4
    cin >> choice;
    switch(choice - 1)
    {
         case 0:
               //Action
               break;
         case 1:
               //Action
               break;
         case 2:
               //Action
               break;
         case 3:
               //Action
               break;
         default:
              cout << "You entered an invalid command. Try again." << endl;
    }
}

在这种情况下,当敌方HP通过cond降到0或以下时,//action最终将变为虚假。

但是,当我输入随机密钥时,它会转到默认大小写并再次要求用户输入,但跳过cin >> choice;并在无限循环中再次播放默认大小写。

如何避免这种情况?

1 个答案:

答案 0 :(得分:1)

您需要清除输入状态,然后忽略无效的垃圾。

default:
    cout << "You entered an invalid command. Try again." << endl;
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

另请参阅此答案:Why would we call cin.clear() and cin.ignore() after reading input?