Member 13922884 Ответов: 1

Ошибка тернарного оператора


#включить <stdio.h>
тап_п()
{
int b,i=5;
i==5?b=2:b=4;
printf ("%d",b);
возвращает 0;
}

Синтаксическая ошибка: значения требуется

Что я уже пробовал:

Проблема решается при использовании скобок (b=2) и (b=4). Я нашел ответ в интернете. Но я не знаю причины. Пожалуйста, объясните мне причину этого.
Спасибо.

1 Ответов

Рейтинг:
10

OriginalGriff

Приоритет оператора-это проблема:

i == 5 ? (b = 2) : (b = 4);
Но это очень плохо написано и мало что дает.
Вместо этого попробуйте это:
b = i == 5 ? 2 : 4;

что делает то же самое гораздо более читабельно!


Member 13922884

Хорошо, Спасибо !!

OriginalGriff

Всегда пожалуйста!

Member 13922884

b=i==5?2:4; Мне понятно. Сначала вычислялся тернарный оператор, а затем его значение передавалось в b.

Но как скобки помогают в приведенном выше утверждении?
Я знаю,что тернарный оператор имеет более высокий приоритет, чем оператор присваивания. Но разве b=7 не равно (b=7).

OriginalGriff

Потому что компилятор видит вашу версию так:

(i==5?b)=(2:b)=4;>/pre>
And goes "Eh? You what? That isn't an LValue!"
The left hand side of <code>a = b </code> must be an LValue - a value that can be assigned to, not a constant, or a result.

Member 13922884

Хорошо. Спасибо снова.

Member 13922884

главный ()
{
int a=10,b=0,c=7;
Если (a?b:c==0)
Printf ("1");
Если ((a?b:c)==0)
Printf ("2");
}

В этой программе скобки используются для вычисления тернарного оператора перед оператором"==". Так что здесь я могу понять использование функции (). Но не в приведенной выше программе.