Прежде всего, просто чтобы очистить что-то, EOF
не требуется, чтобы быть специально -1. Стандарт ISO C требует, чтобы он имел отрицательное значение.
Также обратите внимание, что тип char
может быть подписан или без знака; который определяется реализацией.
Функции , getc
и getchar
могут использоваться для обработки двоичных потоков, а не только для текстовых потоков. Байты имеют значения от 0 до UCHAR_MAX
. Естественным типом для этого диапазона является unsigned char
. Возвращаемое значение getc
не может быть unsigned char
, поскольку EOF
не представимо. Это также не может быть signed char
, потому что signed char
не может удерживать значения от 0 до UCHAR_MAX
. Таким образом, выбирается более широкий тип: тип int
. На основных платформах int
шире, чем char
: он имеет размер не менее 2. И поэтому он способен отображать некоторое отрицательное значение, которое может использоваться для EOF
, и все значения байтов в диапазоне от 0 до UCHAR_MAX
.
В некоторых реализациях C (для таких систем, как некоторые чипы DSP) это не так: int
- один байт. Это проблемы. При такой реализации C диапазон действительных байтовых значений, возвращаемых getc
, должен быть отрицательным, и одно из этих значений сталкивается с EOF
. Тщательно написанный код может сказать, что это так: было возвращено значение, равное EOF
, но функции feof
и ferror
сообщают об ошибке: поток не является ошибкой, а конец файла не произошел. Таким образом, значение, которое выглядит как EOF
, фактически является действительным байтом.
Итак, что происходит, когда кто-то на самом деле вводит символ, код которого '-1' –
просто печатает -1, я тоже это пробовал. Я думаю, когда getChar() возвращает -1, это другое, а просто набирает -1 через клавиатура! @ M.M –
Я сказал символ, код которого '-1', а не символы' '' и '1' –