Вопрос по ternary, c, operator-precedence – Приоритет оператора и троичный оператор

0

У меня проблема с C.

<code>#include<stdio.h>
int main()
{
    int a = 10, b = 0, c = 7;
    if (a ? b : c == 0)
        printf("1");
    else if (c = c || a && b)
        printf("2");
    return 0;
}
</code>

Этот код печатает 2, но я думаю, что a? B: c возвращает b = 0, а 0 == 0 возвращает 1. Можете ли вы объяснить код?

Почему бы тебе просто не посмотреть таблицу приоритетов операторов? Такие вопросы бесполезны в противном случае. Blagovest Buyukliev
Если вы знаете, что речь идет о приоритете, почему бы не использовать порядок приоритетов чтобы понять, где поставить скобки? Oliver Charlesworth

Ваш Ответ

1   ответ
3

В первом операторе if:

  if (a ? b : c == 0)

если вы введете значения, то оно станет

if(10 ? 0 : 7 == 0)

означает, что он всегда будет возвращать 0.

Вот почему управление переходит к остальной части, и там становится

else if (7 = 7 || 10 && 0)

Так как вы использовали здесь оператор "=" (c = c), он всегда будет истинным, поэтому он печатает "2".

Теперь вы хотите, чтобы код возвращал «1», а затем измените свой оператор if таким образом.

 if( (a ? b:c) == 0){...}

ператор @because "==" имеет более высокий приоритет, чем троичный оператор.

Похожие вопросы