2016-09-11 4 views
-1

2D int配列を使用してCでグラフィカルな表を作成しようとしています。それはすべてうまくいきますが、整数の長さが異なると、テーブルはもう良く見えません。次に例を示します。Cの列の可変長

グッド

[ 198 ] [ 2 ] [34313] 
[ 4 ] [ 54 ] [ 6 ] 
[ 7 ] [ 888 ] [ 9 ] 

[198] [2] [34313] 
[4] [54] [6] 
[7] [888] [9] 

良くない私が思い付くことは「最大のintの長さを取得し、間隔を%-Xdを使用していたが、私はドン私はXを%d、つまりprintf(" [%-%dd]", maxLength, mat[i][j]);で置き換えることを考えましたが、私はすべて[%dd]を取得します。

誰もがこの問題を解決する方法を知っていますか?

+1

'printf'のmanページではわかりませんでしたか? 'c printf'の簡単な検索はどうですか? – Olaf

+2

[良い 'printf'リファレンス](http://en.cppreference.com/w/c/io/fprintf)が便利かもしれません。 –

+0

http://stackoverflow.com/questions/153890/printing-leading-0s-in-c – OldProgrammer

答えて

1

二つの主要なオプションがあります。

  1. は、文字列内のXの正しい値を実行時にフォーマット文字列を作成します。

    char format[8]; 
    snprintf(format, sizeof(format), "%%%dd", width); 
    printf(format, matrix[row][col]); 
    
  2. printf()ドキュメントを読み、*を使用書式文字列で、幅が値から読み取られることを示します。

    printf("%*d", width, matrix[row][col]); 
    

これらの両方は、最小幅で番号を右揃えにします。値が大きすぎて収まらない場合は、必要に応じて余分なスペースを使用して印刷されます。

ゼロ埋め込みを希望する場合は、フォーマット(%05d)に0を追加するか、精度(%.5d)を使用するか、%.*dを使用します。 +で強制的に符号を付けることができます。 -などで左寄せにすることができます。

最大幅を決めるときは、マイナス記号にはマイナス記号のための余分なスペースが必要であり、最小値と最大値を分析して、十分なスペース。最大数が9で最小値が-100,000の場合、最大数を使用して幅を決定するとうまく動作しません。明らかに、値がすべて非負である場合、これは問題ではありません。

+0

実際に私は "%* d"を使い終わった、ありがとう! – Adrian