3

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

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

返回假!

下面是完整的功能:

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

4 回答 4

8

是什么类型的current_move?如果是char*(或char[]),则您正在比较指针,而不是字符串。更好地使用std::stringfor current_move,那么与 的比较==将直观地起作用。

您需要添加#include <string>. (在 MSVC 中,字符串的某些部分在没有它的情况下也可以工作,但它是非标准的并且会导致错误,例如在将字符串传递给 时cout)。

于 2013-05-27T18:28:09.263 回答
3

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

if (strcmp(current_move, "ATTACK") == 0)true如果它们匹配,将返回。

于 2013-05-27T18:31:46.530 回答
1

您需要执行 current_move==string("attack") 否则您将比较指针。字符串运算符 == 或 strncmp,一个或另一个......

于 2013-05-27T18:30:20.810 回答
0

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

我的建议是只需更改 to 的类型,current_movestd::string就会起作用。然后你将比较内容,而不是指针。

于 2013-05-27T18:34:33.607 回答