Стандартные функции ввода символов C возвращают значение, равное unsigned char
или EOF
.Таким образом, чтобы использовать возвращаемое значение из функции, такой как fgetc
, сохраните его в int
, а не char
:
int x = fgetc(stdin);
if (x == EOF)
// Code for handling error or end of file.
else
// Code for handling a character.
Также обратите внимание, что многие стандартные подпрограммы C для работы с символамииспользуйте unsigned char
.Использование char
в вашем коде может вызвать проблемы.
Если в вашем коде есть функция, которая читает текст с ввода и преобразует цифры в нем в числа, а затем возвращает эти числа, вы должны спроектировать свою функцию так, чтобы онаимеет некоторый способ указать, возвращает ли он -1 или EOF
.Обычный способ сделать это - вернуть два отдельных значения: одно указывает на то, было ли значение успешно прочитано или нет, а другое - на значение (в случае успеха).
Методы возврата двух значений включают:
- Возвращает структуру, содержащую два члена.
- Возвращает индикацию состояния (успех или ошибка) в возвращаемом значении функции и возвращает фактическое значение в объекте, который передается вфункция через указатель.
Источник: C 2018 7.21.7.1 параграфы 2 и 3 говорят:
Если указатель конца файла для ввода stream
указатель на поток не установлен, и присутствует следующий символ, функция fgetc
получает этот символ в виде unsigned char
, преобразованного в int
…
Если индикатор конца файла дляпоток установлен, или если поток находится в конце файла, индикатор конца файла для потока установлен, и функция fgetc
возвращает EOF
.В противном случае функция fgetc
возвращает следующий символ из входного потока, на который указывает stream
.Если происходит ошибка чтения, устанавливается индикатор ошибки для потока и функция fgetc
возвращает EOF
.