Как обрабатывать данные или символ -1 при чтении из файла, поскольку EOF также равен -1 - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь прочитать серию отрицательных чисел из файла.Число -1 повторяется n раз, и я также читаю все данные до EOF.как данные -1 и EOF также -1, как справиться с этой ситуацией?

1 Ответ

2 голосов
/ 07 мая 2019

Стандартные функции ввода символов 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...