EOF упражнение 1-6 K&R язык программирования C
Это взято непосредственно из книги K&R:
У меня возникли проблемы с пониманием того, как выполнить это упражнение, а также с пониманием того, что происходит с абзацем, цитируемым блоком.Приоритет
!=
выше, чем у=
, Что означает, что при отсутствии скобок реляционный тест!=
будет выполняться до присвоения=
. Итак, утверждениеc = getchar() != EOF
Эквивалентно
c = (getchar() != EOF)
Это имеет нежелательный эффект установки c в 0 или 1, в зависимости от того, возвращает ли вызов getchar конец файла. (Подробнее об этом в главе 2.)
Упражнение 1-6. убедитесь, что выражение
getchar() != EOF
равно 0 или 1.
Я знаю, что EOF является символьной константой типа int и обычно имеет значение -1. Поскольку отрицательное значение int никогда не может иметь то же значение, что и char, когда он делает сравнение, его нужно продвинуть до int, который затем каким-то образом сигнализирует о конце файл.
Я также понимаю, что без скобок, указанных выше, сравнение !=
выполняется до задания, но что это на самом деле означает? Что же происходит с этой функцией? Также я напечатал значение EOF и было -1, что означает это упражнение, когда он говорит, проверьте это 0 или 1?
1 ответ:
Он говорит, что:
c = (getchar() != EOF)
Означает прочитать символ из
stdin
, а затем сравнить его с EOF. В результате получается 1, если это правда, и 0, если это ложь. Этот результат затем присваиваетсяc
. Символ, который был прочитан, теряется, следовательно, "нежелательный эффект".Он хочет, чтобы вы сами запустили это таким образом, чтобы увидеть, как вы можете произвести 0 и 1, отправив EOF против любого другого символа.