2016-06-24 9 views
3

右側のすべての出力をどのように並べるのが最適ですか?Cで字下げして印刷

例:

 2 
     4 
     8 
     16 
     32 
     64 
     128 
     256 
     512 
    1024 
    2048 

    ... 

134217728 

私の最後の数がN桁を持っている場合は、どのようにして(この場合はただ一桁を持っている)最初の1つを出力する(N - 1)左のスペース:2のべき乗のための?

+5

Hont:printf' 'のためのフォーマットパラメータをルックアップ。 –

+1

'printf'のフィールド幅に' * 'を使うことができます。次に、パラメータから幅を取得します。 – Barmar

+2

[printf'ファミリの機能のドキュメント](http://en.cppreference.com/w/c/io/fprintf)は、このサイトよりもずっと良いリソースです。 – WhozCraig

答えて

4

を生成します。ですから、最大桁数を計算した後、あなたが行うことができます:

printf("%*d\n", max_digits, value); 
2

ここで言ったようにあなたはprintfの幅トリックを使用することができます。Printf reference

printf ("Width trick: %*d \n", 5, 10);

あなたは*を使用してprintf()に、計算フィールド幅を供給することができ

Width trick: 10

1

int main(int argc, char *argv[]) { 
    for (int i=2; i<134217729;i=i*2) 
     printf("%*d\n",20, i); 
    return 0; 
} 

出力

  2 
      4 
      8 
      16 
      32 
      64 
     128 
     256 
     512 
     1024 
     2048 
     4096 
     8192 
     16384 
     32768 
     65536 
     131072 
     262144 
     524288 
    1048576 
    2097152 
    4194304 
    8388608 
    16777216 
    33554432 
    67108864 
    134217728 
+0

数字の代わりにcharを使用するとどうなりますか? –

+2

これはまったく同じですが、*フラグ*は各変換指定子*で同じです。 –

+1

@ViníciusGuardianoSouza 'strlen(char *)'を使ってCで文字列の長さを見つけ出し、それに応じてフォーマットすることができます。 –