Как использовать EOF для запуска текстового файла в C?

У меня есть текстовый файл с строками в каждой строке. Я хочу увеличить число для каждой строки в текстовом файле, но когда он достигнет конца файла, он, очевидно, должен остановиться. Я попытался провести некоторое исследование EOF, но не мог понять, как правильно его использовать.

Я предполагаю, что мне нужен цикл while, но я не уверен, как это сделать.

Как вы определяете EOF, зависит от того, что вы используете для чтения streamа:

function result on EOF or error -------- ---------------------- fgets() NULL fscanf() number of succesful conversions less than expected fgetc() EOF fread() number of elements read less than expected 

Проверьте результат входного вызова для соответствующего условия выше, затем вызовите feof() чтобы определить, был ли результат вызван ударом EOF или некоторой другой ошибкой.

Использование fgets() :

  char buffer[BUFFER_SIZE]; while (fgets(buffer, sizeof buffer, stream) != NULL) { // process buffer } if (feof(stream)) { // hit end of file } else { // some other error interrupted the read } 

Использование fscanf() :

 char buffer[BUFFER_SIZE]; while (fscanf(stream, "%s", buffer) == 1) // expect 1 successful conversion { // process buffer } if (feof(stream)) { // hit end of file } else { // some other error interrupted the read } 

Использование fgetc() :

 int c; while ((c = fgetc(stream)) != EOF) { // process c } if (feof(stream)) { // hit end of file } else { // some other error interrupted the read } 

Использование fread() :

 char buffer[BUFFER_SIZE]; while (fread(buffer, sizeof buffer, 1, stream) == 1) // expecting 1 // element of size // BUFFER_SIZE { // process buffer } if (feof(stream)) { // hit end of file } else { // some other error interrupted read } 

Обратите внимание, что форма одинакова для всех из них: проверьте результат операции чтения; если это не удалось, проверьте EOF. Вы увидите множество примеров, таких как:

 while(!feof(stream)) { fscanf(stream, "%s", buffer); ... } в while(!feof(stream)) { fscanf(stream, "%s", buffer); ... } 

Эта форма не работает так, как думают люди, потому что feof() не вернет true до тех пор, пока вы не попытаетесь прочитать ее за конец. В результате цикл выполняет слишком много времени, что может или не может вызвать у вас некоторое горе.

Один возможный цикл C:

 #include  int main() { int c; while ((c = getchar()) != EOF) { /* ** Do something with c, such as check against '\n' ** and increment a line counter. */ } } 

На данный момент я бы проигнорировал feof и подобные функции. Опыт показывает, что слишком легко назвать это не в то время и обработать что-то дважды в убеждении, что EF еще не достигнуто.

Pitfall, чтобы избежать: используя char для типа c. getchar возвращает следующий символ, переданный в unsigned char а затем в int . Это означает, что на большинстве [нормальных] платформ значение EOF и действительные значения « char » в c не перекрываются, поэтому вы случайно не обнаружите EOF для «нормального» char .

Вы должны проверить EOF после чтения из файла.

 fscanf_s // read from file while(condition) // check EOF { fscanf_s // read from file } 
  • Создание Runnable Jar с включенными внешними файлами
  • jQuery: чтение текстового файла из файловой системы
  • Как проверить, ответил ли ping или нет в пакетном файле
  • Как перечислить файлы в JAR-файле?
  • Использование curl для загрузки данных POST с файлами
  • Как сохранить строку в текстовый файл с помощью Java?
  • java чтение файла с сетевого устройства
  • Все мои папки и файлы на моем флеш-накопителе были переименованы автоматически, и я больше не могу их открывать ... Мне нужны эти файлы
  • Сохранить и загрузить MemoryStream в / из файла
  • Как написать текстовый файл Java
  • Получение FILE * из std :: fstream
  • Давайте будем гением компьютера.