我是刚开始编程的新手,不知道怎么在这里发布我的问题。希望这能行。总之,我从基础开始,刚学会了"if“语句。但是当我试图创造我自己的版本时,它不起作用。下面的程序显示了所有三个cout结果,即使我只输入一个选项(攻击、运行或隐藏)。在只有一条“如果”声明的时候,它运行得很好。我也试过“否则如果”,但是不管我选择什么,它只打印出“你攻击了”的结果。)(我用搜索栏进行类似的问题,这些问题可能已经回答了,但找不到什么能帮我的忙。如果有类似的问题,如果你能指点我,我会很感激,但如果你能特别指出我的错误,我会非常感激。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;
}发布于 2017-07-10 09:25:30
if(choice=="Attack"||"attack")不是的意思是“如果选择包含”攻击“,或者选择包含”攻击“,做事情”。
意思是“如果选择包含”攻击“,或者”攻击“是真实的,做事情”。
在伪代码中,您希望:
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")发布于 2017-07-10 09:32:47
你必须用
if(choice=="Attack"||choice=="attack")
{
cout<<"You have attacked!"<<endl;
}或者是一个布尔运算符。因此,在布尔值中,除0以外的任何事物都给人以1的印象。因此,if代码中的语法总是被执行的。这就是为什么在else if情况下,第一条语句总是被执行(并且跳过更多的语句)。
而且,using namespace std;是一个糟糕的实践,因为它使我们的代码仅限于一个std库。相反,您必须使用std:cout;
发布于 2017-07-10 09:33:55
欢迎来到C/C++世界.
正如您已经在教程或书籍中所读过的,if的父类中的内容必须是一个boolean值。现在,很多东西可以自动转换为bool,并作为if的一个条件。特别是,任何可以转换为int的东西都会附带一个bool值。指针就是这样的。
0不同,则结果将是-> true0。编写if(choice=="Attack"||"attack")时,如果选择的内容等于字符串Attack,或者指向底层const char*攻击的指针不是零,则告诉编译器执行const char*的内容。
attack是一个有效的字符串,它意味着它的值不是零,这反过来意味着您得到了它的真值。其他所有的ifs也是如此。所有if的第二部分都是true,因为它们不是null指针。
将所有的if修改如下:if(choice=="Attack"||choice=="attack")和问题将被修复。
https://stackoverflow.com/questions/45008273
复制相似问题