c printf漂亮的打印格式

时间:2011-07-10 23:25:43

标签: c printf

我正在打印一系列线条。线条的长度是不同的。有时候我必须在线的末尾添加空格来对齐线条。在每一行的末尾我添加“\ n”字符问题是“\ n”之后的新行似乎是在下一行的某些空格后开始的。它很奇怪。任何建议或意见表示赞赏。

switch(struct.var1) {
    case 0:
switch(struct.var2)
{
case 1: printf("xyx");break;
case 2: printf("abc");break;
}
break;
case 2: printf("xyz");break;
case 3: printf("xyz");break;
.
.
.
.
.
.
.
.
.
.
.
.
.
.
case n: printf("XYZ           ");break;
case m:printf("ABC           ");break;
case 0xff:
switch(struct.var2)
{
    case 1: printf("MNO  ");
    case 2: printf("QRS   ");
}
}//end of switch case.

printf("\n");

请查看上面的代码段。这显然是printf的对齐问题。我无法真正发现代码的任何问题。

2 个答案:

答案 0 :(得分:2)

你在Windows上吗?您可能需要在字符串末尾添加\r以及\n

答案 1 :(得分:2)

您发布的代码不足以诊断问题,但我的建议是回避它。不是在字符串后打印空格来进行对齐,而是为字符串指定正确宽度的字段。

如果可以的话,我要做的另一点是使用数组而不是switch语句:

char *strings[256][2] = {
    {"xyz", "abc"},
    // ...
    {"MNO", "QRS"}
};

// print selected string left justified in a 7-character wide field.
printf("%-7s\n", strings[struct.var1][struct.var2]);

从您发布的代码中不清楚选择字符串所涉及的值是否完全连续。如果它们不是很连续,但仍然相当密集(即,你使用的是大多数但不是全部的值),最简单的方法是用空字符串填充未使用的点并仍使用数组。