Как нарисовать хорошую таблицу ASCII в C? - PullRequest
0 голосов
/ 01 апреля 2011

Я хочу нарисовать таблицу, например,

----------
|   |    |
----------
|   |    |
----------
|   |    |
----------
|   |    |
----------

, однако, это выглядело грязно и безобразно :(. Другая вещь, которая меня беспокоила, это ширина каждой строки, так как внутри каждой коробки содержится число.

void draw_table( entry* ptr, int size ) {
    int x = 0;
    for( ; x < size; ++x ) {
        printf( "_____ _____ \n" );
        printf( "| %d | %d | \n", ptr[x].virtual_page, ptr[x].page_frame );
    }
}

Как можно сопоставить длину каждого "_____" с целым числом (числом цифр) внутри каждого поля?

Ответы [ 3 ]

5 голосов
/ 01 апреля 2011

Вы можете использовать спецификатор формата ширины поля в printf, чтобы все числа печатались с фиксированной шириной.Тогда вы можете легко отформатировать таблицу.Например:

printf("|%8d|", 12345);

будет печатать:

|   12345|

См. Справочную страницу для printf (google "man printf") для всех вещей, которые вы можете сделать.Это может сделать довольно мощное форматирование.

3 голосов
/ 01 апреля 2011

Для каждого столбца вам нужно предварительно измерить ширину самой широкой записи в нем, а затем сделать что-то вроде

printf("...%.*s...", n, "____________________________");

для печати n подчеркивания. Есть и другие способы, но это самый простой.

Лично я бы не создавал таблицы ASCII, подобные этой, и вместо этого генерировал бы некоторую высокоуровневую разметку, такую ​​как HTML <table>, и использовал бы существующий библиотечный код для преобразования его в простой текст, если это необходимо.

2 голосов
/ 02 мая 2012

Кстати, приятно также нарисовать его со знаком плюс, например:

+-----+-----+
|Head1|...  |
+-----+-----+
|     |     |
|     |     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...