所以我正在尝试为我的C ++类制作一个基于文本的游戏,并且似乎无法弄清楚如果以前收集的项目为了故事,if-else语句只能执行有意义。如果该项目不在库存中,则玩家的选项将再次循环,以便他们选择不同的选项。我尝试过:else if(input6 == "rub" || inventory[0] == "Purple Fruit")
但是无论玩家是否拥有该项目,它都会执行该语句。谢谢你的时间!!我的意思是。
do {
cout <<"You gotta start doing something quick before the swelling gets worse" <<endl;
cout <<"Options are: \"rub\" the random substances oozing from your purple fruit onto your swelling neck, \"keep\" following the tracks until you could get help from the humans if those tracks actually belong to a human, or \"look\" around for anything to help cure your swelling neck\""<<endl;
cin >>input6;
if (input6 == "keep")
{
cout << "" <<endl;
return 0;
}
else if (input6 == "look")
{
cout <<"Good luck" <<endl;
}
else if (input6 == "rub" || inventory[0] == "Purple Fruit")
{
cout << ".." <<endl;
return 0;
}
} while (input6 != "grab");
cout <<"Out"<<endl;
inventory[1] = "Pink Sap";
cout<< inventory[1] <<endl;
答案 0 :(得分:0)
您不能使用&#34; =&#34;来比较字符串。您需要使用strcmp函数来比较字符串。
答案 1 :(得分:0)
else if (input6 == "rub" || inventory[0] == "Purple Fruit")
应该是else if (input6 == "rub" && inventory[0] == "Purple Fruit")
。在用户的第一个库存槽中,以便使用&#34; rub&#34;命令。你应该添加另一个处理&#34; rub&#34;如果用户没有&#34; Purple Fruit&#34;在他们的库存中也是如此。考虑这样的事情:
else if (input6 == "rub")
{
if(inventory[0] == "Purple Fruit")
{
// user has item
}
else
{
// user does not have item
}
}
另外,请注意使用某种&#34; set&#34;类,如std::set
,它允许您拥有可以按名称查询的无序库存项目集合,而不必担心项目占用的库存位置。
例如,使用std::set::find
,您可以测试项目是否在您的广告资源中,如下所示:
// assume inventory is std::set<std::string> and is already initalized and populated
if(inventory.find("Purple Fruit") != inventory.end())
{
// item is in the inventory
}
else
{
// item is not in the inventory
}
答案 2 :(得分:0)
这不符合你的想法:
if (input6 == "keep")
假设input6
被定义为char
的数组并且足够大以容纳给定的输入,那么您正在做的是比较数组的地址input6
(因为数组衰减到指向大多数上下文中第一个元素的指针)和字符串常量"keep"
的地址。这总是评估为假。
要比较字符串的内容,请使用strcmp
函数:
if (strcmp(input6, "keep") == 0)
如果两个操作数都包含相同的以空字符结尾的字符串,则此函数返回0.