Подтвердить что ты не робот

Почему переменная, используемая для хранения возвращаемого значения getchar, объявляется как int?

Я начинаю на языке программирования C, недавно я изучил функцию getchar, которая будет принимать символ из консоли или из файла, сразу отображать его при вводе, и нам нужно нажмите клавишу Enter для продолжения.

Он возвращает unsigned char, который они читают. Если встречается конец файла или ошибка getchar(), функции возвращают EOF.

Мой вопрос в том, что, когда он возвращает unsigned char, то почему его возвращаемое значение сохраняется в переменной int?

Пожалуйста, помогите мне.

4b9b3361

Ответ 1

Именно из-за этого значения EOF. Поскольку char в файле может быть любым возможным значением char, включая нулевой символ, который C-строки используют для завершения, getchar() должен использовать большой целочисленный тип для добавления значения EOF.

Просто для этого используется использование int, но он может использовать любой тип с не менее 9 бит.

Ответ 2

Возвращаемый тип - int для размещения для специального значения EOF.

EOF - это макрос, который расширяется до целочисленного постоянного выражения с типом int и зависимым от реализации отрицательным значением, но очень часто -1.

Ответ 3

Прочитайте эту ссылку: ссылка

Здесь написано, что:

Не конвертируйте значение, возвращаемое функцией ввода-вывода символа, в char, если это значение будет сравниваться с EOF. Как только возвращаемое значение этих функций было преобразовано в тип char, значения символов могут быть неотличимы от EOF. Кроме того, если sizeof (int) == sizeof (char), то int, используемый для захвата возвращаемого значения, может быть неотличим от EOF. См. FIO35-C. Используйте функции feof() и ferror() для обнаружения ошибок в конце файла и файла, когда sizeof (int) == sizeof (char) для получения дополнительной информации о том, когда sizeof (int) == sizeof (char). См. STR00-C. Представляйте символы с использованием соответствующего типа для получения дополнительной информации о правильном использовании типов символов.

Это правило применяется к использованию всех функций ввода-вывода символов.