我正在打印一系列线条。线条的长度是不同的。有时候我必须在线的末尾添加空格来对齐线条。在每一行的末尾我添加“\ 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的对齐问题。我无法真正发现代码的任何问题。
答案 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]);
从您发布的代码中不清楚选择字符串所涉及的值是否完全连续。如果它们不是很连续,但仍然相当密集(即,你使用的是大多数但不是全部的值),最简单的方法是用空字符串填充未使用的点并仍使用数组。