Программа для просмотра файлов "Súbor" в С(Си) - C (СИ)
Формулировка задачи:
Помогите пожалуйста написать программу, не могу понять как это должно выглядит...
Это условия задачи - "
Напишите программу, которая группирует фразы из prvy.txt и druhy.txt и записует в файловую treti.txt попеременно так, чтобы каждое парное слово в файле будет treti.txt из файла prvy.txt и каждый пара из файла druhy.txt в порядке были в исходном файле. Каждое слово в файле treti.txt будет с последующим пробелом. Кроме того, перед каждым словом отметит выражения, из которого файлы слово происходит. Если из файла prvy.txt, бренд символ +, если druhy.txt, бренд является признаком -. Если некоторые из файлов содержит больше слов, чем видов, и эти будут перечислены в ряд в конце файла treti.txt. Предположим, что слово содержит только буквы и могут быть разделены только одним пробелом.
" Я не знаю как это записать, но это должно выглядить так... Заранее спасибо!!!Решение задачи: «Программа для просмотра файлов "Súbor" в С(Си)»
textual
Листинг программы
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
int main() {
FILE* f = NULL, * f1, * f2, * f3;
int ch;
assert((f1 = fopen("pervy.txt", "r")));
assert((f2 = fopen("druhy.txt", "r")));
assert((f3 = fopen("treti.txt", "w")));
while (!feof(f1) || !feof(f2)) {
f = (f == f1) ? f2 : f1;
if ((ch = fgetc(f)) != EOF) {
fprintf(f3, "%c%c", (f == f1) ? '+' : '-', ch);
while (((ch = fgetc(f)) != EOF) && (!isspace(ch))) {
fputc(ch, f3);
}
fputc(' ', f3);
}
}
fclose(f3);
assert((f3 = fopen("treti.txt", "r")));
while ((ch = fgetc(f3)) != EOF) {
putchar(ch);
}
fclose(f3);
fclose(f2);
fclose(f1);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
stdio.hдля работы с файлами и выводом данных на экран;assert.hдля проверки истинности выражения перед выполнением программы;ctype.hдля определения класса символа (является ли он буквой, цифрой, знаком препинания и т.д.).
- Определяется точка входа в программу - функция
main(). - Создаются четыре переменные:
FILE* f,FILE* f1,FILE* f2,FILE* f3для работы с файлами.
- В блоке
assert()открываются три файла:f1открывает файлpervy.txtдля чтения;f2открывает файлdruhy.txtдля чтения;f3открывает файлtreti.txtдля записи.
- В цикле
whileпроисходит чтение двух файлов одновременно:fпереключается междуf1иf2с помощью тернарного оператора;- Если символ не является концом файла (
EOF), он записывается вf3вместе с символом-разделителем; - До тех пор, пока не встретится пробел или конец файла, в
f3записываются все символы из текущего файла.
- Файл
f3закрывается. - В блоке
assert()открывается файлtreti.txtдля чтения. - В цикле
whileпроисходит чтение символов изf3и их вывод на экран. - Файл
f3закрывается. - Файлы
f2иf1закрываются. - Возвращается значение 0, что означает успешное выполнение программы.