C ++ if语句使用字符串不按预期工作

时间:2013-05-27 18:23:42

标签: c++ string if-statement

我已经搜索过此错误,但似乎没有人像我一样遇到同样的问题。我正在尝试用C ++制作一个基于文本的基于文​​本的RPG游戏来学习,我希望用户能够键入他们想要做的事情,例如,如果他们键入ATTACK他们会攻击怪物,但我的如果声明:

if((current_move == "ATTACK") || (current_move == "attack"))

返回false!

以下是完整功能:

while(monster_health > 0)
    {
        std::cin >> current_move;
        std::cout << current_move;
        if((current_move == "ATTACK") || (current_move == "attack"))
        {
            std::cout << "You attacked the monster!\n";

            double damage = return_level(xp) * 1.2;

            std::cout << "You did " << damage << " damage!\n";

            monster_health -= damage;
            if(monster_health < 0)
            {
                monster_health = 0;
                break_out = true;
            }
        }
        else if(current_move == "FLEE")
        {
            std::cout << "You ran away...\n";
            break_out = true;
        }
        else
        {
            std::cout << "Sorry, I didn't understand, what will you do? ATTACK or FLEE?\n";
        }
    }

我只是不断收到“抱歉,我不明白”的消息;

请告诉我任何其他错误或不良做法,因为我刚刚开始学习:)

4 个答案:

答案 0 :(得分:8)

current_move的类型是什么?如果它是char*(或char[]),则表示您正在比较指针,而不是字符串。更好地使用current_move ==,然后与#include <string>的比较将直观地进行。

您需要添加cout。 (在MSVC中,字符串的某些部分也可以不使用它,但它是非标准的并且会导致错误,例如将字符串传递给{{1}}时)。

答案 1 :(得分:3)

如果您使用的是C字符串(char[]),则需要使用strcmp()进行比较。如果两个字符串是等效的,则返回0。

如果匹配,

if (strcmp(current_move, "ATTACK") == 0)将返回true

答案 2 :(得分:1)

你需要做current_move == string(“attack”)否则你将比较指针。字符串运算符==或strncmp,无论是其中一个......

答案 3 :(得分:0)

您的问题是您正在比较C字符串。当你对它们进行==时,你正在比较两者的指针,这在这段代码中是无用的。

我的建议是将current_move的类型更改为std::string,它就会起作用。然后你将比较内容,而不是指针。