2012-09-03 19 views
5

私は配列のすべての情報を表示するプログラムを書いています。角括弧内の配列インデックス(例えば[2])から始めなければならず、それらはお互いに一直線に並ばなければなりません。printf右括弧で囲まれた数字を

それだけで数だった場合、私はあなたが行うことができますことを知っている:

printf("%-10d", index); 

が、私は本当にそれになりたいときに周りの括弧を置くと、次の出力に

[   1] 
[   2] 
... 
[  10] 
[  11] 

を与えるだろう。

  [1] 
     [2] 
... 
     [10] 
     [11] 

どうすればよいですか?

答えて

8

2つのステップで行います。まず、一時バッファに整列されていない文字列を作成し、右揃えで文字列を出力します。行うには

char buf[sizeof(index) * (CHAR_BITS + 2)/3 + 4]; 
sprintf(buf, "[%d]", index); 
printf("%-12s", buf); 
2

一つ簡単なことでは、2段階のプロセスにそれを打破するために、次のようになります。

char tmp[128]; 
sprintf(tmp, "[%d]", index); 
printf("%-10s", tmp); 
2

あなたは一行のみとなし、一時のcharバッファが必要です。

printf("%*s[%d]\n",12-(int)log10(index),"",index); 
+0

これは要件として指定されていませんでしたが、これはインデックス> 0の場合にのみ有効です。 –

+0

あまりにも早すぎる最適化とオーバーエンジニアリングにより、コードをデバッグできなくなります今から6ヶ月を維持することができます。 ;-) –

関連する問題