2011-07-10 88 views
0

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

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的对齐问题。我无法真正发现代码的任何问题。

+6

我们可以看到一些代码吗? – emboss

+4

你可以发布打印,预期输出和实际输出的代码片段吗? –

+0

开关(struct.var1){ 情况下0: \t开关(struct.var2) \t { \t壳体1:输出( “XYX”);打破; \t案例2:printf(“abc”); break; \t} \t break; \t案例2:printf(“xyz”); break;案例3:printf(“xyz”); break; \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t case n:printf(“XYZ”); break; \t case m:printf(“ABC”); break; \t 0xff的情况下: \t开关(struct.var2) \t { \t \t壳体1:输出( “MNO”); \t \t案例2:printf(“QRS”); \t} \t} //结束切换案例。 \t printf(“\ n”); – liv2hak

回答

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]); 

目前尚不清楚,从你的代码已经发布是否涉及选择的值这些字符串完全是连续的。如果它们不是连续的,但仍然相当密集(即,你使用的是大多数但不是全部的值),用空字符串填充未使用的点并且仍然使用数组可能是最容易的。

2

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

+3

你不应该。根据C标准,'\ n'应该始终工作。 –

+0

哦。哦,只是一个猜测。 – Whatang

+0

更具体地说,'\ n'本身就是以文本模式打开的流的正确行结束字符,标准输出流默认以文本模式打开。 – caf