Как объединить 2 файла в один (третий) на чистом Си? - C (СИ)
Формулировка задачи:
Доброго времени суток. Проблема в следующем. Как записать содержимое файла (txt) в динамический массив строк? Или же есть другой способ перенести всё содержимое файла? К сожалению, ничего из с++ использовать нельзя.
Решение задачи: «Как объединить 2 файла в один (третий) на чистом Си?»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
FILE *origin = NULL;
FILE *second_origin = NULL;
FILE *output = NULL;
char current_symbol;
if (!(origin = fopen("input1.txt", "r")))
{
printf("Here is the error while opening the first file!");
exit(1);
}
if (!(second_origin = fopen("input2.txt","r")))
{
printf("Here is the error while opening the second file!");
exit(2);
}
if (!(output = fopen("output.txt","w")))
{
printf("Here is the error while opening the output file!");
exit(3);
}
while (!feof(origin))
{
current_symbol = fgetc(origin);
if (current_symbol == EOF)
break;
fprintf(output, "%c", current_symbol);
}
fprintf(output, "\n");
while (!feof(second_origin))
{
current_symbol = fgetc(second_origin);
if (current_symbol == EOF)
break;
fprintf(output, "%c", current_symbol);
}
fclose(origin);
fclose(output);
fclose(second_origin);
}
Объяснение кода листинга программы
- #define _CRT_SECURE_NO_WARNINGS - это директива препроцессора, которая отключает некоторые проверки безопасности при работе с функциями стандартной библиотеки.
- #include
- включает в программу функции файла стандартного ввода/вывода, необходимые для работы с консолью. - #include
- включает в программу функции файла conio.h, которые используются для работы с консолью, такие как функция getch(), используемая для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу. - #include
- включает в программу функции файла stdlib.h, которые используются для работы с памятью и строками. - int main(void) - это функция, которая запускается при запуске программы.
- *FILE origin = NULL;* - объявляет переменную origin типа FILE, которая будет использоваться для работы с файлами. Значение NULL указывает на то, что файл не открыт.
- *FILE second_origin = NULL;* - объявляет переменную second_origin типа FILE, которая будет использоваться для работы со вторым файлом. Значение NULL указывает на то, что файл не открыт.
- *FILE output = NULL;* - объявляет переменную output типа FILE, которая будет использоваться для работы с выходным файлом. Значение NULL указывает на то, что файл не открыт.
- if (!(origin = fopen(
input1.txt,r))) - проверяет, открылся ли файл input1.txt для чтения. Если это не так, программа выводит сообщение об ошибке и завершается с кодом 1. - printf(
Here is the error while opening the first file!); - выводит сообщение об ошибке открытия первого файла. - exit(1); - завершает программу с кодом 1.
- if (!(second_origin = fopen(
input2.txt,r))) - проверяет, открылся ли файл input2.txt для чтения. Если это не так, программа выводит сообщение об ошибке и завершается с кодом 2. - printf(
Here is the error while opening the second file!); - выводит сообщение об ошибке открытия второго файла. - exit(2); - завершает программу с кодом 2.
- if (!(output = fopen(
output.txt,w))) - проверяет, открылся ли файл output.txt для записи. Если это не так, программа выводит сообщение об ошибке и завершается с кодом 3. - printf(
Here is the error while opening the output file!); - выводит сообщение об ошибке открытия выходного файла. - exit(3); - завершает программу с кодом 3.
- while (!feof(origin)) - это цикл while, который выполняется до тех пор, пока не достигнут конец файла origin.
- current_symbol = fgetc(origin); - читает текущий символ из файла origin и сохраняет его в переменной current_symbol.
- fprintf(output,
%c, current_symbol); - записывает текущий символ в выходной файл. - fprintf(output,
\n); - записывает символ новой строки в выходной файл. - while (!feof(second_origin)) - это цикл while, который выполняется до тех пор, пока не достигнут конец файла second_origin.
- current_symbol = fgetc(second_origin); - читает текущий символ из файла second_origin и сохраняет его в переменной current_symbol.
- fprintf(output,
%c, current_symbol); - записывает текущий символ в выходной файл. - fclose(origin); - закрывает файл origin.
- fclose(output); - закрывает файл output.
- fclose(second_origin); - закрывает файл second_origin.
- Программа завершается.