2011-07-10 15 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:のprintf( "XYX");破ります。 \tケース2:printf( "abc");改行; \t} \t break; \tケース2:printf( "xyz");改行; \tケース3:printf( "xyz");改行; \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \t。 \tケースn:printf( "XYZ");改行; \tケースm:printf( "ABC");改行; \t場合は0xFF: \tスイッチ(struct.var2) \t {\t \tケース1:のprintf( "MNO")。 \t \tケース2:printf( "QRS"); \t} \t} //スイッチの端には、 \t printf( "\ n"); – liv2hak

答えて

2

あなたが投稿したコードは、問題を診断するのに実際には十分ではありませんが、私の助言はそれを回避することです。文字列の後ろに空白を印字するのではなく、文字列に適切な幅のフィールドを指定します。それはあなたが値を選択するに関与するかどうかを掲載しましたコードからはっきりしていない

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

:あなたができる場合、私は作ると思い

他の点では、代わりにswitch文の配列を使用することです文字列は完全に連続しています。もしそれらがあまり連続していなくてもかなり密であれば(つまり、ほとんどの値を使用していますが)、空の文字列で未使用の点を埋めるだけで配列を使用するのが最も簡単です。

2

Windowsを使用していますか?文字列の末尾に\rと、\nを追加する必要があります。

+3

する必要はありません。 Cの標準によれば、 '\ n'は常に動作するはずです。 –

+0

oh。まあ、ちょうど推測。 – Whatang

+0

より具体的に言えば、 '\ n'だけがテキストモードで開かれたストリームの正しい行終了文字であり、標準出力ストリームはデフォルトでテキストモードで開かれます。 – caf

関連する問題