EOF
не символ
Это важно.Запомните это.
Когда вы пытаетесь получить персонажа, может произойти несколько вещей.Обычное дело - эффективно читать символ: ваша программа получает этот символ и продолжает свой путь ...
int ch = getchar();
, но что происходит, если происходит сбой диска?или есть плохой сектор именно в этот момент?или сеть выходит из строя?или данных больше нет?
Что ж, тогда должен быть способ отличить эти условия от простых символов.Способ, выбранный C
, заключается в возвращении значения, которое НИКОГДА не может быть интерпретировано как реальный символ.Это значение EOF
, которое является отрицательным значением (все действительные символы возвращаются со значением, преобразованным в unsigned char
, даже если ваша реализация использует signed char
для char
).Именно поэтому очень важно использовать int
для символов (не char
, как ожидалось бы).
То есть EOF
означает, что невозможно прочитатьперсонаж.Вы можете попытаться выяснить, почему (сеть отключена? Плохой сектор? Конец файла? ...) или просто предположить, что это конец файла, и перейти оттуда.
Итак, в
while ((c = getchar()) != EOF)
есть две вещи: присваивание и сравнение
c = getchar()
поместит значение 0 или больше в c для реальных символов или EOF
в случае ошибки, поэтому
while ((c = getchar()) != EOF)
означает «пока нет ошибок при вводе символов в переменную c
»
Важно помнить:
EOF
не является символом .Определите символы с помощью int
.