Написать функцию слияния двух текстовых файлов - C (СИ)

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

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

Написать функцию слияния двух текстовых файлов X и Y так, чтобы строки файлов перемежались, т.е. X1→Y1→ X2→Y2→ Я предполагаю, что текстовые файлы должны создаваться вручную самим пользователем, вот только как написать ту самую функцию для их построчного слияния я понятия не имею... Может кто подкинуть код?

Решение задачи: «Написать функцию слияния двух текстовых файлов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char* argv[]) {
    if (argc != 3) {
        fprintf(stderr, "Usage: %s <TextFile1> <TextFile2>\n", argv[0]);
        return EXIT_FAILURE;
    }
 
    FILE* first = fopen(argv[1], "r");
    if (first == NULL) {
        perror(argv[1]);
        return EXIT_FAILURE;
    }
 
    FILE* second = fopen(argv[2], "r");
    if (second == NULL) {
        fclose(first);
        perror(argv[2]);
        return EXIT_FAILURE;
    }
 
    char tmpname[L_tmpnam];
    FILE* result = fopen(tmpnam(tmpname), "w");
    char buff[256] = {0};
 
    while (!feof(first) || !feof(second)) {
        if (fgets(buff, sizeof(buff), first)) {
            fprintf(result, "%s", buff);
        }
        if (fgets(buff, sizeof(buff), second)) {
            fprintf(result, "%s", buff);
        }
    }
 
    fclose(result);
    fclose(second);
    fclose(first);
 
    printf("file: %s\n", tmpname);
 
    return EXIT_SUCCESS;
}

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

  1. Программа считывает два текстовых файла.
  2. Если программа получает неправильное количество аргументов, выводится сообщение об ошибке.
  3. Открываются два файла для чтения.
  4. Если файлы не могут быть открыты, программа выводит сообщение об ошибке и завершается.
  5. Создается временный файл для записи результата.
  6. В цикле, пока есть данные для чтения из обоих файлов, они считываются и записываются в результат.
  7. Файлы закрываются после завершения чтения.
  8. Выводится имя временного файла.
  9. Программа завершается успешно.

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

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