2017-05-24 102 views
1

有什么办法可以同时满足C++中的两个条件?满足两个条件与一个单一的如果在C++

我有

x and y 
-1 -1 
-1  0 
-1  1 
0 -1 
0  0 
0  1 
1 -1 
1  0 
1  1 

列表所以我想用所有的人组合在一个公式,如:

a = x+y (example) 

但是我要排除的情况,即x和y同时= 0。

所以我尝试:

if(x!=0 && y!=0){ 
a = x+y; 
} 

但是排除当x或y等于0,而不仅仅是点x每一种情况下,Y =(0,0),因为我想。

我该如何解决这个问题?

+1

它可以这么简单'if(x or y)' – Slava

回答

10

你需要

if (!(x == 0 && y == 0)) { 
    ... 
} 

您可以使用De Morgan's laws要翻译成

if (x != 0 || y != 0) { 
    ... 
} 
+1

最后!!经过多年的计算机组织和体系结构教学后,我发现有人实际上应用布尔代数来解决设计问题......只是提到它的事实让我感到微笑。 :)啊那些基本的身份仍然活着,好! –

+0

尽管... x = -1和y = 1的情况下,您可以找到解决方案。它们的总和为零。只是说。 –

1

您可以使用一个exnot条件和状况

if (!(x == 0 && y == 0)) { //code 
} 
1
namespace utility{ 
    bool all_of(std::initializer_list<bool> bs){ 
    return std::all_of(bs.begin(), bs.end(), [](bool b){return b;}); 
    } 
    bool any_of(std::initializer_list<bool> bs){ 
    return std::any_of(bs.begin(), bs.end(), [](bool b){return b;}); 
    } 
} 

然后

if(!utility::all_of({x==0, y==0})){ 
    a = x+y; 
} 

if(!(x==0 && y==0)){ 
    a = x+y; 
} 

如果你更理智。

3

你应该使用逻辑OR操盘运营商,以获得预期的结果:

if(x!=0 || y!=0){ 
    a = x+y; 
} 

这种情况的布尔台将false如果只有两个操作数都是0其他比它的true

0 0 false 
1 0 true 
0 1 true 
1 1 true 
相关问题