好吧,我有一个问题,我没有使用字符串进行选择,所以现在我使用整数。当用户输入数字时,游戏进行。如果他们输入了错误的字符,它应该给出else语句,但是如果我输入一个字母或字符,系统会进入无限循环效果然后崩溃。即使用户定义变量的类型,有没有办法给出else语句。
// action variable;
int c_action:
if (c_action == 1){
// enemy attack and user attack with added effect buffer.
///////////////////////////////////////////////////////
u_attack = userAttack(userAtk, weapons);
enemyHP = enemyHP - u_attack;
cout << " charging at the enemy you do " << u_attack << "damage" << endl;
e_attack = enemyAttack(enemyAtk);
userHP = userHP - e_attack;
cout << "however he lashes back causing you to have " << userHP << "health left " << endl << endl << endl << endl;
//end of ATTACK ACTION
}else{
cout << "invalid actions" << endl;
goto ACTIONS;
}
答案 0 :(得分:3)
您尚未显示如何读取整数。但总的来说,你想做这样的事情:
int answer;
if (cin >> answer)
{
// the user input a valid integer, process it
}
else
{
// the user didn't enter a valid integer
// now you probably want to consume the rest of the input until newline and
// re-prompt the user
}
答案 1 :(得分:3)
问题是你的cin正在抓取角色然后失败,这会将角色留在输入缓冲区中。您需要检查cin是否有效:
if( cin >> k) { ... }
或
cin >>k;
if(!cin.fail()) { ... }
如果失败,请清除缓冲区和失败位:
cin.clear(); // clears the fail bit
cin.ignore(numeric_limits<streamsize>::max()); // ignore all the characters currently in the stream
编辑:在限制头文件中找到numeric_limits,您按照惯例包含该文件:
#include <limits>
答案 2 :(得分:1)
你的问题不在于else语句,而在于你的输入。如果您执行类似
的操作cin >> i;
并输入一个字符,设置了流错误状态,除非您先重置错误状态,否则从流中读取的任何后续尝试都将失败。
您应该读取字符串,并将字符串内容转换为整数。