Проблема здесь в том, что вы пытаетесь использовать троичный условный оператор для вычисления операторов.Тернарный условный оператор в C должен использоваться для вычисления значений.Кроме того, логический аргумент условного оператора также должен быть выражением.
Тем не менее, некоторые операторы фактически оцениваются как выражения,
int g = 5;
int a = (g = 4);
printf("g is %d, a is %d\n", g, a);
В результате на консоль будет выведено следующее:
g is 4, a is 4
Эти операторы также работают внутри троичного условного оператора:
int g = 5;
int a = 1 ? rand() % 5 : (g = 4);
int c = 0 ? 3 : (g += a);
printf("g is %d, a is %d, c is %d\n", g, a, c);
Что печатает
g is 8, a is 3, c is 8
Хорошее правило: условный оператор не можетоценивать по ключевым словам или компилировать временные элементы кода.В качестве аргументов могут приниматься только значения .