Из предыдущих ответов важно отметить, что в C ++ вы пропустили, что оператор AND &&
имеет более высокий приоритет оператора , чем оператор OR ||
.
Это можно сравнить с тем, как мультипликативные операторы *
, /
, %
чисел имеют более высокий приоритет, чем аддитивные операторы +
и -
в алгебре.
Перегруппируйте паратезы, чтобы у вас были эти три требования о том, какими должны быть x, y и z, и утверждение верно, когда все три верны.(Технически это называется произведением формы суммы, поскольку утверждение if требует истинности всех трех меньших утверждений (AND), где каждое из меньших утверждений использует только операторы OR.).
if((x==a||x==b||x==c) && (y==d||y==e||y==f) && (z==g||z==h||z==i)){
// Do x
}
Ваш исходный код будет эквивалентен
if(x==a || x==b || (x==c && y==d) || y==e || (y==f && z==g) || z==h || z==i){
// Do x
}
Для больших операторов if вы также можете использовать новые строки, но, конечно, это займет больше строк.
if((x==a||x==b||x==c)
&& (y==d||y==e||y==f)
&& (z==g||z==h||z==i)
&& ... other conditions)){
// Do x
}
Если вы это сделаетеЕсли вам не нужны такие громоздкие и длинные нотации оператора if, вы можете рассмотреть возможность разбиения на логические тесты (условие if является «продуктом» логических тестов), а именно
bool a1 = (x==a||x==b||x==c);
bool a2 = (y==d||y==e||y==f);
bool a3 = (z==g||z==h||z==i);
bool a4 ...
if (a1 && a2 && a3 && a4 && ..) {
// Do x
}