Условный оператор:?: не работает в c - PullRequest
0 голосов
/ 13 февраля 2019

Я работал с условностями в ц.Во время кодирования я обнаружил, что этот код не работает

int x = 1;
printf(1>0? "%d",x : "0");

Теперь, очевидно, 1 больше 0. Поэтому программа должна вывести значение x.Но на самом деле он никогда ничего не печатает!Я использую Codeblocks 17.12 и мой компилятор MingW

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Работает как указано.К сожалению, вы неправильно используете это.Вы, кажется, ожидаете, что проверка условия должна привести к одному из двух вызовов функций:

printf("%d",x);
printf("0");

Это теперь не так, как работает Си.Вы используете условное выражение, поэтому результатом должно быть одно значение, которое переводится в один аргумент функции.Запятая, которую вы написали, не является запятой, которая используется для разделения аргументов функций.Это оператор запятой , который сам является выражением.

Семантика выражения "%d", x заключается в оценке "%d", отбрасывании результата изатем оцените x.x является результатом выражения с оператором запятой.

Это означает, что ваш вызов функции эквивалентен

printf(1 > 0 ? x : "0");

Вы передаете целое число, где ожидается указатель на строку.Приличный компилятор должен пометить это, по крайней мере, предупреждением, а если это не ваше, вам нужно указать ему соответствующие флаги, чтобы предупредить вас об этом.

0 голосов
/ 13 февраля 2019

В вашем коде есть ошибки.

Попробуйте:

printf("%d", 1 > 0 ? x : 0);

Я приглашаю вас проверить printf документацию и некоторые примеры троичного оператора чтобы лучше понять, что не так с вашим кодом.

...