Разбить текст на страницы - 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);
}

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

  1. Объявлены переменные:
    • page - номер текущей страницы
    • k - счётчик строк на текущей странице
    • maxlen - максимальная длина строки на текущей странице
    • n - количество строк на странице
    • text - массив для чтения текста из файла
    • file - указатель на файл с исходным текстом
    • out - указатель на файл для записи разбитого текста
  2. Пользователю предлагается ввести количество строк на странице.
  3. Открываются файлы in.txt и out.txt для чтения и записи соответственно.
  4. Переменная page инициализируется значением 1.
  5. Цикл while с условием !feof(file) читает текст из файла по строкам и записывает каждую строку в файл out.txt.
  6. Переменная k увеличивается на 1 после каждой прочитанной строки.
  7. Если длина текущей строки больше maxlen, то maxlen обновляется значением длины текущей строки.
  8. Если текущая страница заполнена (k == n), то:
    • Если номер текущей страницы четный, то в файл out.txt записывается номер текущей страницы.
    • Иначе, в файл out.txt записывается строка, содержащая номер текущей страницы в виде символа '%' и номера страницы в 10-тичном формате.
    • Записывается строка 12 в файл out.txt.
    • Увеличивается значение переменной page на 1.
    • Устанавливается maxlen равным 0.
    • Устанавливается k равным 0.
  9. Цикл while завершается, когда достигнут конец файла.
  10. Выводится сообщение о том, что текст разбит на страницы.
  11. Файлы out.txt и file закрываются.

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

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