我是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));
发布于 2017-08-28 05:08:25
考虑到第一个%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
https://stackoverflow.com/questions/45912027
复制相似问题