2015-05-31 3 views

ответ

4

Это не работает, как это, как первое выражение a > b оценивает в булево значение, которое преобразуется (из-за сравнения с c) либо 0 или 1, в зависимости от его истинного значения. Затем вы пытаетесь сравнить его с c, который не то, что вы хотите. Использовать

if ((a > b) && (b > c)) 

вместо этого. Таким образом вы вычисляете логический AND двух логических элементов, и если оба они равны true, то математическое утверждение a > b > c истинно (по транзитивности).

Если вы скомпилируете все предупреждения, компилятор (вероятно) предупредит вас. По крайней мере, г ++ говорит:

предупреждения: сравнения, как 'X < = Y < = Z' не имеют их математический смысл [-Wparentheses]

3

Вы должны отделить оба условия через И не требуется (& &) Оператор

if ((a>b) && (b > c)){ 
    //code 
} 
+0

скобки здесь, как подсказывает ответ. Это не значит, что оставлять их - плохая идея. – chris

+0

Я хочу сказать, что вам нужно отделить оба теста состояния через AND или OR – Nakib

+2

@chris, это определенно лучше, так как в противном случае большинство из нас должно взглянуть на http://en.cppreference.com/w/cpp/language/ operator_precedence – vsoftco

Смежные вопросы