О тройном операторе. Я переписывал оператор if-else в C, используя более чистый тернарный оператор. Here's код:i% 2 == 0? arr [i] = 0: arr [i] = 1; Ошибка тройного оператора
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10];
int i;
// for (i = 0; i < 10; i++)
// {
// if (i % 2 == 0)
// {
// arr[i] = 0;
// }
//
// else arr[i] = 1;
// }
for (i = 0; i < 10; i++)
{
i % 2 == 0 ? arr[i] = 0 : arr[i] = 1;//Line in question
}
/* Just to check the result */
for (i = 0; i < 10; i++)
{
printf ("%d ", arr[i]);
}
return 0;
}
Закомментированный код сделал работу, но на мое удивление, когда я скомпилированный файл с тройным оператором, я получил следующее:
C:\Users...\main.c|21|error: lvalue required as left operand of assignment|
Это простой код для проверки погоды, положение в массиве нечетное или четное. Был ли поиск и единственное, что я прочитал, связанное с этим кодом, состоит в том, что lvalue является переменной. Если это правда, я собираюсь передать пример, который я до сих пор не получил ответ на:
printf ("%d", 23 + 4);
Заполнитель собирается заменить буквальным значением 27. Нет переменная не участвует здесь он работает жестко. Спасибо.
тройных должна быть 'переменным = условие? true_result: false_result'. выполнение заданий внутри блоков результатов довольно неприятно/уродливо. например 'arr [i] = i% 2 == 0? 0: 1' –
Тернарный оператор не «более чист», чем if-else. Ваша удивительная ошибка - это демонстрация этого факта. – Hurkyl
По крайней мере, в этом случае тернарный оператор не является «более чистым», чем оператор 'if' /' else'. Это просто делает код сложнее читать (и, как вы видели, синтаксически неверно). –