C/C++

Не могу понять почему это не верно. С++

Прикрепил фото вопросаПочему это не верно если можно написать вот так:

 int main() 
{
int i = 1;
int j, g;
i > 5 ? j = 4 : g = 6;

return 0;
}
Задал вопрос в одну группу и получил такой ответ: \Вовще не понимаю что не так, если я написал код выше который делает тоже самое
Илья Сасс
Илья Сасс
188
Ваш код на С++ является синтаксически верным и может быть скомпилирован без ошибок. Однако, использование тернарного оператора ? : в этом случае может быть не совсем корректным с точки зрения стиля кодирования.

Тернарный оператор ? : предназначен для выбора одного из двух значений в зависимости от условия. Он обычно используется для присваивания значения переменной, например: int x = (a > b) ? a : b;. В вашем коде вы используете тернарный оператор для выполнения двух разных операций присваивания в зависимости от условия: i > 5 ? j = 4 : g = 6;. Это может сделать код менее читабельным и понятным для других программистов.
Сардар Абдуллаев
Сардар Абдуллаев
25 860
Лучший ответ
Потому, что тернарная операция - это присваивание ОДНОЙ переменной результата вычисления одного из двух подвыражений. А в варианте два производится присваивание ДВУМ разным переменным.
Edouard Charapov
Edouard Charapov
95 116
Тесты иногда и ошибаются (их люди пишут). А еще могут опираться на устаревшие версии языка.
Заменить можно (оба операнда имеют совместимый тип - int). Скажу больше - можно даже несовместимые типы подружить, если использовать запятую.
Коченгин Илья Извините, но не подскажете, что вы имеете в виду?
понятно, как использовать для одной переменной (j = i > 5 ? 4 : 6;) но как быть, если их две (j и g)?
Леонид Алексеев Так как в коде приведенном в вопросе. Если хочется несколько присваиваний сразу:
 i>5?(j=5,g=6):(g=5,j=6); 
Кстати, следуя этой логике, можно было еще выбрать и ответ номер 4. Его можно расписать так же, как вы расписали 2-й вариант.
присваивание идёт слева от оператора, а не внутри его конструкций
то есть
int a = 4;
int b = 3;
int c;
c = a > b ? a : b;
если a больше b, то c присвоить a, иначе c присвоить b.
Arman Idrissov
Arman Idrissov
3 143
Arman Idrissov Я отредактировал код.
Болотбек Ибраимов И чем эта хрень поможет автору, у которого вообще другая задача?