我已经搜索过此错误,但似乎没有人像我一样遇到同样的问题。我正在尝试用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";
}
}
我只是不断收到“抱歉,我不明白”的消息;
请告诉我任何其他错误或不良做法,因为我刚刚开始学习:)
答案 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
,它就会起作用。然后你将比较内容,而不是指针。