О тернарном операторе. Я переписывал оператор if-else на C, используя более чистый тернарный оператор. Вот код:
#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|ошибка: в качестве левого операнда присваивания требуется lvalue|
Это простой код для проверки того, является ли позиция в массиве четной или нечетной. Выполнил поиск, и единственное, что я прочитал, связанное с этим кодом, это то, что lvalue является переменной. Если это правда, я приведу пример, на который по сей день у меня нет ответа:
printf ( "%d", 23 + 4 );
Заполнитель будет заменен буквальным значением 27. Здесь не задействована никакая переменная, она работает жестко. Спасибо.
variable = condition ? true_result : false_result
. выполнение заданий внутри блоков результатов довольно неприятно/уродливо. напримерarr[i] = i % 2 == 0 ? 0 : 1
- person Marc B   schedule 19.05.2015if
/else
. Это просто делает код трудным для чтения (и, как вы видели, синтаксически неправильным). - person Keith Thompson   schedule 19.05.2015if...else
, чем расшифровывать троичную, и по этой причине я никогда не использую ее. - person Weather Vane   schedule 19.05.2015x = cond ? this : that;
позволяет избежать повторенияx
, что особенно полезно, когдаx
равноfoo->bar[baz].thud
. Это также полезно в определениях макросов, когда вы хотите, чтобы макрос расширился до выражения. - person Keith Thompson   schedule 19.05.2015if
/else
делает то же самое, просто делает код более неясным. Использование его в выражении может быть полезным, если это означает, что другие части одного и того же выражения не должны повторяться. - person Keith Thompson   schedule 20.05.2015