EOF равно -1, потому что так оно определено.Имя предоставляется стандартными заголовками библиотеки, которые вы #include
.Они делают это равным -1, потому что это должно быть что-то, что не может быть принято за фактический байт, прочитанный getchar()
.getchar()
сообщает значения фактических байтов, используя положительное число (от 0 до 255 включительно), поэтому -1 отлично подходит для этого.
Оператор !=
означает «не равно».0 означает ложь, а все остальное означает истину.Итак, что происходит, мы вызываем функцию getchar()
и сравниваем результат с -1 (EOF).Если результат не был равен EOF, то результат верен, потому что вещи, которые не равны, не равны.Если результат был равен EOF, то результат ложен, потому что равные вещи не являются (не равны).
Вызов getchar()
возвращает EOF, когда вы достигаете «конца файла».Что касается C, то «стандартный ввод» (данные, которые вы даете своей программе, вводя их в командном окне), подобен файлу.Конечно, вы всегда можете набрать больше, поэтому вам нужен явный способ сказать «Я закончил».В системах Windows это control-Z.В системах Unix это control-D.
Пример в книге не является «неправильным».Это зависит от того, что вы на самом деле хотите сделать .Чтение до EOF означает, что вы читаете все, пока пользователь не скажет «Я закончил», и тогда вы больше не сможете читать.Чтение до '\ n' означает, что вы прочитали строку ввода.Чтение до '\ 0' - плохая идея, если вы ожидаете, что пользователь наберет ввод, потому что этот байт трудно или невозможно создать с помощью клавиатуры в командной строке:)