在C中的多列中打印ASCII字符

时间:2017-08-28 05:01:40

标签: c printf ascii multiple-columns

我是C的新手,我需要在列中打印所有ASCII字符(按列而不是按行排序)但是用户需要能够选择显示的列数。

我能够使用特定数量的列来完成它,但如果不编写255种不同的打印格式,我无法想到。这是打印功能的一部分:

int rows = 255/numberOfColumns;
for (i = 0; i <= rows; i++)
{
    printf("%3d = %s\t\t"
           "%3d = %c\t\t"
           "%3d = %c\t\t"
           "%3d = %c\t\t"
           "%3d = %c\t\t"
           "%3d = %c\t\t"
           "%3d = %c\t\t"
           "%3d = %c\t\t\n", i, valorControl, i + 32, i + 32,
           i+(32*2), i+(32*2), i+(32*3), i+(32*3), i+(32*4),
           i+(32*4), i+(32*5), i+(32*5), i+(32*6), i+(32*6),
           i+(32*7), i+(32*7));

1 个答案:

答案 0 :(得分:2)

将第一个%s视为一种类型,而不是%c,您可以写一下 -

int rows = (256+numberOfColumns-1)/numberOfColumns;
for (j=0; j<rows; j++){
    for (i=0; i<numberOfColumns; i++){
        int character = i*rows+j;
        if(character>=256)
            break;
        printf("%3d = %c\t\t", character, character);
    }
    printf("\n");
}

外部循环与代码中的循环相同(更准确一点)。内部循环使用制表符打印每列。

此外,您应该尝试仅打印可打印字符。即使在可打印字符中,\t\n等字符也会破坏你的对齐。

你可以用 -

来做到这一点
printf("%3d = %c\t\t",character, isprint(character)?character:'_');

这仅打印可打印字符,并为其余字符打印'_'

以下是DEMO