在 C++ 中用一个 if 满足两个条件
Satisfy two conditions with a single if in 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) 点。
我该如何解决?
你需要
if (!(x == 0 && y == 0)) {
...
}
您可以使用De Morgan's laws将其翻译成
if (x != 0 || y != 0) {
...
}
您可以将 exnot 条件与 and 条件一起使用
if (!(x == 0 && y == 0)) { //code
}
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;
}
如果你更理智。
您应该使用逻辑 OR 运算符而不是 AND 运算符以获得预期结果:
if(x!=0 || y!=0){
a = x+y;
}
如果只有两个操作数都是 0
而不是 true
:
,则此条件的布尔值 table 将为 false
0 0 false
1 0 true
0 1 true
1 1 true
在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) 点。
我该如何解决?
你需要
if (!(x == 0 && y == 0)) {
...
}
您可以使用De Morgan's laws将其翻译成
if (x != 0 || y != 0) {
...
}
您可以将 exnot 条件与 and 条件一起使用
if (!(x == 0 && y == 0)) { //code
}
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;
}
如果你更理智。
您应该使用逻辑 OR 运算符而不是 AND 运算符以获得预期结果:
if(x!=0 || y!=0){
a = x+y;
}
如果只有两个操作数都是 0
而不是 true
:
false
0 0 false
1 0 true
0 1 true
1 1 true