что эта функция делает "if (c)" print (c), иначе print (c-1) проверяет без какого-либо отношения - PullRequest
0 голосов
/ 16 апреля 2019

Я видел много проблем, например, здесь я привожу один пример.Всегда удивляюсь, почему даже это «если» дается только с одной переменной без какого-либо отношения к другой переменной для проверки.

int c = 0;
if (c)
     printf("%d",c=0);
else
    printf("%d",c=1);
print("%d\n",c);

После того, как я увидел условие while, как while (~ c) дляцикл для запуска.Я запустил этот код и получил 11 в качестве ответа.

output: 11

, но я не знаю, как будет if проверять условие только с одним операндом, т.е. без каких-либо операторов.Я ожидал, что результат будет равен 00, но фактический результат равен 11.

Здесь я ожидаю, что он будет как булев, но здесь c равно int.

Извините за мое ужасное редактирование, это былоя впервые публикую фрагмент кода.

Ответы [ 4 ]

1 голос
/ 16 апреля 2019

Форма оператора if:

if(expression)

Единственное условие - expression должен иметь скалярный тип.

InВ данном конкретном случае c в скобках - это выражение, которое оценивается как false, поскольку его значение равно нулю.

Если вы считаете, что оно не совсем понятно для вас, вы можете просто написать:

if(c != 0)
0 голосов
/ 16 апреля 2019

Синтаксис оператора if равен

(выражение)

Здесь выражение относится к результату оценки состояния.

В этом случае if(c) Неявное преобразование будет похоже на

if(0)

Таким образом, условие не выполняется, и оно попадает в другой случай.

В другом случае,

printf("%d",c=1);

Оценка будет выполняться в порядке присвоения c = 1 первым. Результатом присваивания является успех с измененным значением переменной, поэтому результат выводится как 1 в первом операторе.

, поскольку значение c присвоено 1, последний оператор print печатает соответствующее значение c.

0 голосов
/ 16 апреля 2019

Оператор if здесь действительно не нужен.

После строки int c = 0; значение c равно 0.Оператор if проверяет свое состояние следующим образом: если значение равно 0, оператор считается ложным и ветвь выполнения не вводится.Если оператор if-else, то вводится еще.В противном случае вводится ветка if.В предоставленном вами случае выражение c оценивается как 0, поэтому берется ветвь else.

Что касается напечатанного значения, оператор printf("%d",ex); напечатает значениевыражение ex, интерпретируемое как десятичное целочисленное значение для стандартного вывода.В вашем случае это выражение c=1.Это выражение присваивания, которое всегда оценивается для присваиваемого значения.Изменение c является побочным эффектом.Таким образом, printf("%d",c=1); выводит 1 на стандартный вывод, а затем значение переменной c равно 1. Последовавший print("%d\n",c); выводит 1 на стандартный вывод, за которым следует символ новой строки.

0 голосов
/ 16 апреля 2019

Ненулевое значение оценивается как истинное, а нулевое значение оценивается как ложное.

...