zz_c_04-1-2-assign

**(75%)О =, == и ===** Смотрим разницу. Правильная проверка на равенство: code format="c" if(x==y) printf("x raven y"); code выполняет печать, если x равен y.

Посмотрим, что будет, если пропустить один знак равенства: code format="c" if(x=y) printf("x raven y"); code Теперь в скобках стоит присваивание. В x записывается значение y, и это значение является результатом присваивания. Оператором if оно воспринимается как логическое (0 / не 0). Таким образом, печать происходит, если y не 0, что явно неверно. Кроме того, мы испортили x.

Если вы пропустите один знак равенства в своей программе, компилятор выдаст предупреждение ("возможно, неверное присваивание"), но программа запустится. Читайте предупреждения!

Программа запустится - потому что компилятор считает, что вы знаете, что делаете. Иногда присваивание в условии - именно то, что нужно, например: code format="c" if(f=fopen("имя_файла")) code Здесь условие срабатывает, если файл успешно открылся, при этом открытый поток присваивается переменной f для дальнейшего использования.

А что же насчет ===? Вам повезло. В языке С такой конструкции нет. ;)