Дилема с 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); }
Объяснение кода листинга программы
- В цикле while(1) происходит чтение строки из файла file1 с помощью функции fgets.
- Строка сохраняется в переменной str, которая имеет размер 200 символов.
- Проверяется условие feof(file1), которое возвращает 1, когда достигается конец файла.
- Если условие истинно, то происходит выход из цикла с помощью оператора break.
- В каждой итерации цикла в файл file2 записывается строка, полученная из файла file1, с помощью функции fprintf.
- Формат записи строки включает два поля:
F1.txt
и переменная str. - Значение переменной str увеличивается на два символа
++:
. - Запись в файл file2 осуществляется после каждой итерации цикла, пока не будет достигнут конец файла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д