如何在C中绘制一个漂亮的ASCII表?

时间:2011-04-01 00:20:46

标签: c ascii

我想画一张像

这样的表格
----------
|   |    |
----------
|   |    |
----------
|   |    |
----------
|   |    |
----------

然而,它看起来凌乱而丑陋:(。另一件让我烦恼的是每行的宽度,因为每个盒子里面都有一个数字。

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 个答案:

答案 0 :(得分:5)

您可以使用printf中的字段宽度格式说明符来使所有数字以固定宽度打印。然后您可以轻松地格式化表格。例如:

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

会打印:

|   12345|

有关您可以执行的所有操作,请参阅printf(google“man printf”)的手册页。它可以做一些非常强大的格式化。

答案 1 :(得分:3)

对于每一列,您需要预先测量其中最宽条目的宽度,然后执行类似

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

打印n下划线。还有其他方法,但这是最简单的方法。

就个人而言,我会避免生成像这样的ASCII表,而是生成一些更高级别的标记,如HTML <table>,并使用现有的库代码将其转换为纯文本,如果需要的话。

答案 2 :(得分:2)

顺便说一下,用加号画它也很好,就像这样:

+-----+-----+
|Head1|...  |
+-----+-----+
|     |     |
|     |     |