Я ожидал ошибки в if(b=5)
, так как оператор присваивания используется в операторе if.
Code:
#include <stdio.h>
int main() {
int a=10, b=10;
if(b=5)
a--;
printf("%d, %d", a, b--);
return 0;
}
Я ожидал ошибки в if(b=5)
, так как оператор присваивания используется в операторе if.
Code:
#include <stdio.h>
int main() {
int a=10, b=10;
if(b=5)
a--;
printf("%d, %d", a, b--);
return 0;
}
Вы ожидали, что это вызовет ошибку, потому что это кажется опечаткой при попытке использовать оператор сравнения ==
, обычно используемый в операторах if, подобных этому.
if ( b == 5 )
Выражение в операторе if
if ( b = 5 )
на самом деле оценивается как любое выражение в C. В этом случае его вычисление является значением присваивания 5
, и поскольку оно не равно нулю, оно эквивалентно true
в логическом выражении.
Вероятно, это тонкая опечатка, так что автор, вероятно, выполнил сравнение вместо этого задания. В любом случае это не вызывает ошибки, потому что это допустимый C.
К счастью, во многих компиляторах выдается предупреждение. Обязательно включите все предупреждения в параметрах компилятора и никогда не игнорируйте их. Таким образом, вы избежите этих тонких ловушек в будущем.
Внутри оператора if есть действительное присваивание. Результатом такой операции является присвоенное значение (5), которое допустимо внутри оператора if и оценивается как истинное.
На самом деле, любое число, отличное от 0, будет интерпретироваться как истинное.
Может быть, вы уже знаете, но вы не проводите сравнение там. Операция сравнения ==
.
if
. Присваивание оценивается по присвоенному значению. Все остальное, кроме присвоенного значения0
, оценивается как условиеtrue
. - person RobertS supports Monica Cellio   schedule 30.05.2020