while(x = getchar() != EOF)
должно быть
while((x = getchar()) != EOF)
Ваш код эквивалентен
while(x = (getchar() != EOF))
Также я не понимаю, зачем использовать int, когда оно должно быть char.
Поскольку EOF не может быть представлен char
. Все значения, которые могут быть представлены char
, также могут быть представлены int
, но не наоборот. Но если getchar()
не вернет EOF, он вернет значение, которое может быть представлено символом. Так что этот код в порядке:
while((x = getchar()) != EOF) {
char c = x; // Will always work if you have checked for EOF
Важно!
Обратите внимание, что это:
char x;
while((x = getchar()) != EOF)
будет работать. Это завершит цикл на EOF. Но также будет другая ценность, которая будет ошибочно интерпретироваться как EOF. Это можно продемонстрировать с помощью этого фрагмента:
char c = EOF;
if((char)255 == c)
printf("Ooops!\n");