Копирование содержимого одного файла в другой - 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;
}

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

  1. Подключение стандартной библиотеки ввода-вывода (stdio.h).
  2. Объявление функции filesum с тремя аргументами типа char* (строки).
  3. Открытие трех файлов: file1, file2, file3 на чтение (r) и запись (w).
  4. Проверка корректности открытия файлов, возвращение 1 при ошибке и 0 при успехе.
  5. Инициализация переменной c значением 0 (первый символ в файле).
  6. Цикл чтения файла 1 и записи символов в файл 3 до конца файла (EOF).
  7. Цикл чтения файла 2 и записи символов в файл 3 до конца файла (EOF).
  8. Закрытие файлов file1, file2, file3.
  9. Возвращение 0 (успех).
  10. Вызов функции filesum с аргументами a.txt, b.txt, c.txt.
  11. Вывод сообщения Error в случае ошибки и возврат 0.
  12. Возврат 0 (успех).

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


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

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

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