Копирование содержимого одного файла в другой - C (СИ)
Формулировка задачи:
Всем доброго времени суток. Заранее извиняюсь за глупый вопрос я еще новичок. Вот решаю одну задачку и дошел до момента когда надо скопировать содержимое двух файлов и перенести его в один и столкнулся с проблемой, при копировании ряда цифр из одного файла в другой, в конечном файле куда я все это скопировал последняя цифра из ряда дублируется, честно говоря понятия не имею почему так происходит.
Вот пример:
Допустим у нас есть файлы А и В а также фал (S) в который нужно скопировать.
Содержимое файлов:
A: 1 2 3 4 5
B: 6 7 8 9
После переноса получается вот это:
фай S: 1 2 3 4 5 5 6 7 8 9 9
Если что часть кода с переносом в самом низу.
Вот мой код:
#include#include #include #include int main() { system("chcp 1251"); system("cls"); FILE *A, *B, *C, *S; int x, y, z, count=0; int ch; puts("Заполните файл C: "); C=fopen("Cfile.txt", "w"); assert(C); do { count++; printf("\n%d-й элемент: ", count); scanf("%d", &x); fprintf(C, "%d ", x); ch=getch(); } while(ch!=27); fclose(C); system("cls"); count=0; ch=0; puts("Заполните файл A: "); A=fopen("Afile.txt", "w"); assert(A); do { count++; printf("\n%d-й элемент: ", count); scanf("%d", &y); fprintf(A, "%d ", y); ch=getch(); } while(ch!=27); fclose(A); system("cls"); count=0; x=0; ch=0; puts("Заполните файл B: "); B=fopen("Bfile.txt", "w"); assert(B); do { count++; printf("\n%d-й элемент: ", count); scanf("%d", &z); fprintf(B, "%d ", z); ch=getch(); } while(ch!=27); fclose(B); C=fopen("Cfile.txt", "a+"); assert(C); A=fopen("Afile.txt", "r"); assert(A); B=fopen("Bfile.txt", "r"); assert(B); S=fopen("Sfile.txt", "w"); assert(S); while(!feof(C)) { fscanf(C, "%d", &x); } while(!feof(A)) { fscanf(A, "%d", &y); fprintf(S, "%d ", y); } while(!feof(B)) { fscanf(B, "%d", &z); fprintf(S, "%d ", z); } return 0; }
Решение задачи: «Копирование содержимого одного файла в другой»
textual
Листинг программы
#include <stdio.h> int filesum(char *name1, char *name2, char *name3) { FILE *file1, *file2, *file3; if(!((file1 = fopen(name1, "r")) && (file2 = fopen(name2, "r")) && (file3 = fopen(name3, "w")))) return 1; char c = 0; while((c = fgetc(file1)) != EOF) fputc(c, file3); while((c = fgetc(file2)) != EOF) fputc(c, file3); return 0; } int main() { if(filesum("a.txt", "b.txt", "c.txt")) puts("Error"); return 0; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки ввода-вывода (stdio.h).
- Объявление функции filesum с тремя аргументами типа char* (строки).
- Открытие трех файлов: file1, file2, file3 на чтение (r) и запись (w).
- Проверка корректности открытия файлов, возвращение 1 при ошибке и 0 при успехе.
- Инициализация переменной c значением 0 (первый символ в файле).
- Цикл чтения файла 1 и записи символов в файл 3 до конца файла (EOF).
- Цикл чтения файла 2 и записи символов в файл 3 до конца файла (EOF).
- Закрытие файлов file1, file2, file3.
- Возвращение 0 (успех).
- Вызов функции filesum с аргументами
a.txt
,b.txt
,c.txt
. - Вывод сообщения
Error
в случае ошибки и возврат 0. - Возврат 0 (успех).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д