c ++中的基本if语句3值

时间:2017-07-10 09:22:52

标签: c++

我是新手和编程初学者,不要在这里明白如何发布我的问题。希望这有效。 无论如何,我从基础开始,刚刚学会了" 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;
}

3 个答案:

答案 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"),问题将得到解决。