我最近刚刚学习了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;
并在无限循环中再次播放默认大小写。
如何避免这种情况?
答案 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?