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 против любого другого символа.