Разбить текст на страницы - C (СИ)
Формулировка задачи:
Прошу помощи в решении задачи.
Дан текстовый файл.Преобразовать его, разбив текст на страницы и пронумеровав их, причем номер нечетной страницы должен размещаться в правом нижнем углу, а номер четной страницы - в ее левом нижнем углу. Число стока странице задается, а ширина страницы определяется самой длинной строкой в данной странице. Конец страницы отмечается символом с кодом 12, который помещается в отдельной строке.
Заранее благодарен.
Решение задачи: «Разбить текст на страницы»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main() {
int page, k, maxlen, n;
char text[200];
printf ("Введите кол-во строк на странице:");
scanf("%d", &n);
FILE *file = fopen("in.txt", "rt");
FILE *out = fopen("out.txt", "wt");
page = 1;
k = 0;
maxlen = 0;
while (!feof(file)) {
fgets(text, 200, file);
k++;
int len = strlen(text)-1;
if (len > maxlen) {
maxlen = len;
}
fputs(text, out);
if (feof(file)) {
for (; k != n; k++) {
fputc('\n', out);
}
}
if (k == n) {
if (page % 2 == 0) {
fprintf(out, "%d \n", page);
} else {
char str[10];
sprintf(str, "%c%dd\n", '%', maxlen);
fprintf(out, str, page);
}
fprintf(out, "12 \n");
page++;
maxlen = 0;
k = 0;
}
}
printf ("Текст разбит на страницы =)");
fclose(out);
fclose(file);
}
Объяснение кода листинга программы
- Объявлены переменные:
- page - номер текущей страницы
- k - счётчик строк на текущей странице
- maxlen - максимальная длина строки на текущей странице
- n - количество строк на странице
- text - массив для чтения текста из файла
- file - указатель на файл с исходным текстом
- out - указатель на файл для записи разбитого текста
- Пользователю предлагается ввести количество строк на странице.
- Открываются файлы in.txt и out.txt для чтения и записи соответственно.
- Переменная page инициализируется значением 1.
- Цикл while с условием !feof(file) читает текст из файла по строкам и записывает каждую строку в файл out.txt.
- Переменная k увеличивается на 1 после каждой прочитанной строки.
- Если длина текущей строки больше maxlen, то maxlen обновляется значением длины текущей строки.
- Если текущая страница заполнена (k == n), то:
- Если номер текущей страницы четный, то в файл out.txt записывается номер текущей страницы.
- Иначе, в файл out.txt записывается строка, содержащая номер текущей страницы в виде символа '%' и номера страницы в 10-тичном формате.
- Записывается строка
12в файл out.txt. - Увеличивается значение переменной page на 1.
- Устанавливается maxlen равным 0.
- Устанавливается k равным 0.
- Цикл while завершается, когда достигнут конец файла.
- Выводится сообщение о том, что текст разбит на страницы.
- Файлы out.txt и file закрываются.