По принятому в Си соглашению, ветвь else всегда относится к ближайшему предшествующему ему незанятому if:
if (n>0)
if (m % n > 2)
m -= n;
else m += n;
else m %= n;
В данном случае ветвь else m += n относится к if (m % n > 2), а ветвь else m %= n относится к if (n > 0).
При переходе с Паскаля на Си программисты часто допускают ошибки при формировании условия в операторе if, путая две операции:
= присваивания и
== сравнения:
if (a==b)
printf(“\nЭти величины равны между собой”);
else printf(“\nЭти величины не равны между собой”);
Это правильное сравнение значений двух переменных.
Перепишем это сравнение с ошибкой (компилятором не определяется):
if (a=b)
printf(“\nЭти величины равны между собой”);
else printf(“\nЭти величины не равны между собой”);
В этом случае сначала переменной a будет присвоено значение переменной b, а потом будет проверено, какое именно значение присвоено. Если это значение отлично от нуля (неложь), то выведется сообщение: