Дилема с fgets и feof - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Решаю проблему с файловым вводом-выводом. Нужно скопировать все строчки из одного файла и вставить в другой, добавив в каждую строку имя файла. Написал, работает. Но! В некоторых случаях программа дублирует последнюю строку. Например: Запишу в исходный файл F1.txt: { Table. My name is Vasya } Результат будет будет(что и должно быть): testRes.txt: { F1 :++: Table. F1 :++: My name is Vasya F1 :++: F1 :++: } Но если в файле будет не 2 пустых строки, а одна: F1.txt: { Table. My name is Vasya } Результат будет такой: testRes.txt: { F1 :++: Table. F1 :++: My name is Vasya F1 :++: My name is Vasya } Вот, где тут "собака зарыта"?
#define _CRT_SECURE_NO_WARNINGS
 
#include <locale>
 
int main()
    {
    setlocale(LC_CTYPE, "rus");
        
    FILE *file1, *file2;
    char str[200]; //Буфер в котором хранится переносимая строка
    
    file2 = fopen("testRes.txt", "w");
    file1 = fopen("F1.txt", "r");
        
    while (!feof(file1))
    {
        fgets(str, 200, file1);
        //fscanf(file1, "%s", str);
        fprintf(file2, "%s :++: %s", "F1.txt", str);
    }
 
    printf("\n");
    system("PAUSE");
    }

Решение задачи: «Дилема с fgets и feof»

textual
Листинг программы
while (1)
    {
        fgets(str, 200, file1);
        if (feof(file1)) break;
        fprintf(file2, "%s :++: %s", "F1.txt", str);
    }

Объяснение кода листинга программы

  1. В цикле while(1) происходит чтение строки из файла file1 с помощью функции fgets.
  2. Строка сохраняется в переменной str, которая имеет размер 200 символов.
  3. Проверяется условие feof(file1), которое возвращает 1, когда достигается конец файла.
  4. Если условие истинно, то происходит выход из цикла с помощью оператора break.
  5. В каждой итерации цикла в файл file2 записывается строка, полученная из файла file1, с помощью функции fprintf.
  6. Формат записи строки включает два поля: F1.txt и переменная str.
  7. Значение переменной str увеличивается на два символа ++:.
  8. Запись в файл file2 осуществляется после каждой итерации цикла, пока не будет достигнут конец файла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы