|
3.14. Потому что c описано как char, в то время как EOF - значение типа int равное (-1). Русская буква "Большой твердый знак" в кодировке КОИ-8 имеет код '\377' (0xFF). Если мы подадим на вход этой программе эту букву, то в сравнении signed char со значением знакового целого EOF, c будет приведено тоже к знаковому целому - расширением знака. 0xFF превратится в (-1), что означает, что поступил символ EOF. Сюрприз!!! Посему данная программа будет делать вид, что в любом файле с большим русским твердым знаком после этого знака (и включая его) дальше ничего нет. Что есть досадное заблуждение. Решением служит ПРАВИЛЬНОЕ объявление int c.
E-mail:
info@telesys.ru
Почему неверно:
#include
main(){
char c;
while((c = getchar()) != EOF)
putchar(c);
}
Ответы