Если я наберу слова «Hello World» в стандартный поток ввода, эта программа выведет странные символы коробки вместо ожидаемого «Hello World» обратно в стандартный вывод.
#include <stdio.h>
int main(void)
{
// print out all characters from the stream until '/n' character is found
int ch;
while (ch = getchar() != '\n')
{
putchar(ch);
}
putchar('\n');
}
Я знаю, как решить проблему. Но почему эта строка кода неверна?
while (ch = getchar() != '\n')
x_eq_y = x == y
интерпретировалось как(x_eq_y = x) == y
, как глупый пример. Тем не менее, у C есть некоторые шаткие приоритеты (которые были признаны авторами ошибкой, но все еще эмулируются другими языками для совместимости). Например,x == y << z
совпадает сx == (y << z)
, как и следовало ожидать, аx == y & z
совпадает с(x == y) & z
. - person Ulfalizer   schedule 27.03.2015WTF operator precedence
каждые 5 минут. Либо разделяйте составные операторы, либо используйте явные круглые скобки. В любом другом случае вы напрашиваетесь на неприятности или навязываете их другим людям. - person   schedule 27.03.2015