当我为cin输入一个字母<<<<<<< int值

时间:2010-06-08 20:40:43

标签: c++ int if-statement

好吧,我有一个问题,我没有使用字符串进行选择,所以现在我使用整数。当用户输入数字时,游戏进行。如果他们输入了错误的字符,它应该给出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;
}

3 个答案:

答案 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;

并输入一个字符,设置了流错误状态,除非您先重置错误状态,否则从流中读取的任何后续尝试都将失败。

您应该读取字符串,并将字符串内容转换为整数。