我是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));
答案 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