2016-08-19 54 views
-1

为什么我不能得到正确的字符串。我在表达中有什么错误?我无法弄清楚。我储存了好几个小时。为什么我的或操作员不工作?

#include <iostream> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string> 
using namespace std; 

int main(){ 
string var = "y"; 
string constant ="y"; 

if ((var != constant)||(var != "n")){ 
cout << "error"; 
} 
else { 
cout << "right" // this is what it should print 
} 
} 

我明白,或运营商使用||作为符号。那么为什么我的程序不能执行它的任务

+0

预期结果是什么?根据“if”条件,代码将打印出“错误”。 – songyuanyao

+0

'var!=“n”'是真的,所以整个表达式都是真实的。 – dasblinkenlight

+0

'var'不能同时等于两个不同的东西... – Dmitri

回答

2

你的程序结果是正确的。

由于var被设定为 “y”,则表达式

var != "n" 

显然是正确的。

这样,充分表达

if (.... || var != "n") 

评估为真。根据定义“任何事情或真实”总是如此。

不管你想要你的else语句执行多少,它都不会。因为它不应该。

+0

明白了!谢谢! –

0

你的程序没有问题(除了第14行的语法错误)。您的测试如果varconstant不等于, var不等于'n'。这个或者声明工作正常,因为你基本上在说:if (condition or true),这将永远是真的,因为如果他或者操作符只发现一个条件为true,它将返回true。

我相信你想要的是和,&&,运营商。只有当它的两个条件都成立时它才会返回true。

这就是上面说的,即使是&&运营商,你仍然不得不改变你的代码。你的错误\错误没有意义。你告诉你的程序:

#pseudo code 

if(false and false) 
    print error 
else 
    print ... 

你的程序只是服从你设置的规则。您的else声明上方的if声明将从开始,因为if声明总是会评估为true,因此不会到达