我是新手和编程初学者,不要在这里明白如何发布我的问题。希望这有效。 无论如何,我从基础开始,刚刚学会了" if"声明。但是,当我试图创建自己的版本时,它无法正常工作。我的程序显示所有三个cout结果,即使我只输入一个选项(攻击或运行或隐藏)。当只有一个"如果"它正常工作。声明。我试过"否则如果"但是它只打印出结果"你已经攻击了#34;无论我选择什么。 :(我在搜索栏中使用了类似的问题,这些问题可能已经得到了解答,但没有找到可以帮助我的东西。 如果有类似的问题,那么如果你能指出我的话,我会感激不尽,尽管如果你能指出我的错误具体是什么,我真的很感激。 日Thnx〜
#include <iostream>
#include <string>
using namespace std;
int main(){
cout<<"Welcome to the jungle!!!"<<endl;
cout<<"--------"<<endl;
cout<<"Enemies approaches! \n Choose your next move! \n";
cout<<"Attack / Run / Hide \n\n\n";
string choice;
cin>>choice;
if(choice=="Attack"||"attack")
{
cout<<"You have attacked!"<<endl;
}
if(choice=="Run"||"run")
{
cout<<"You start running!"<<endl;
}
if(choice=="Hide"||"hide")
{
cout<<"You hide in a cave!"<<endl;
}
return 0;
}
答案 0 :(得分:1)
if(choice=="Attack"||"attack")
不意味着&#34;如果选择包含&#34;攻击&#34;或选择包含&#34;攻击&#34;,那就做&#34;。
这意味着&#34;如果选择包含&#34;攻击&#34;或&#34;攻击&#34;是的,做的事情&#34;。
在伪代码中,您期望:
if choice is the string "Attack"
or choice is the string "attack"
do a thing
但是or
将语句分成了两半,而后半部分根本没有提到变量choice
。它更像是
if choice is the string "Attack"
or the string "attack" on its own is somehow true, whatever that might mean
do a thing
由于"attack"
是指向char
数组的指针,因此true
表示它不是NULL
,总是如此,因此始终输入此分支。
要表达你的意思,请写下来:
if(choice=="Attack"||choice=="attack")
答案 1 :(得分:0)
您必须使用
if(choice=="Attack"||choice=="attack")
{
cout<<"You have attacked!"<<endl;
}
OR(||)是一个布尔运算符。
所以0以外的任何东西都给布尔值1的印象。因此,始终执行if
代码中的语法。这就是在else if
情况下始终执行第一个语句(并跳过更多语句)的原因。
此外,using namespace std;
是一种不好的做法,因为它使我们的代码仅限于一个std库。相反,你必须使用std:cout
;
答案 2 :(得分:0)
欢迎来到C / C ++世界。
正如您在教程或书中已经阅读过的那样,if
的内容中的内容必须是boolean
值。现在,很多东西可以自动转换为bool
并作为if
的条件。
特别是,任何可以转换为int
的内容都会附加bool
值。指针就是这样的。
0
不同,则结果为 - &gt; true
0
否则。编写if(choice=="Attack"||"attack")
,如果所选内容等于字符串if
或指向底层{的指针,则告诉编译器执行Attack
的内容。 {1}} 攻击不为零。
const char*
是一个有效的字符串,意味着它的值不为零,这反过来意味着你得到了一个真实的。
所有其他人attack
也是如此。 ifs
所有if
的第二部分都是true
,因为它们不是null
指针。
将所有if
更改为以下内容:if(choice=="Attack"||choice=="attack")
,问题将得到解决。