我是 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));
最佳答案
将第一个 %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
关于c - 在 C 中的多列中打印 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45912027/