web-dev-qa-db-ja.com

printfで可変テキスト列幅を設定する

C言語で列のサイズを決定するには、%<number>d。たとえば、%3dそして、width = 3の列を提供します。私の問題は、%は受け取る変数なので、%xd(ここで、xは、以前にプログラムで受け取った整数変数です)。しかし、それは機能していません。

これを行う他の方法はありますか?

52
Alaa M.

これは次のようにして実行できます。

printf("%*d", width, value);

リーのコメントから:
精度サイズに*を使用することもできます。

printf("%*.*f", width, precision, value);
89

完全を期すために、POSIX準拠バージョンの printf() を使用して、実際のフィールド幅(または精度)値をパラメーターリストの別の場所に置いて参照することもできます。 1から始まるパラメーター番号とそれに続くドル記号を使用します。

フィールドの幅または精度、あるいはその両方は、数字文字列の代わりに、アスタリスク「*」またはアスタリスクの後に1つ以上の10進数と「$」が続くことで示される場合があります。この場合、int引数はフィールドの幅または精度を提供します。負のフィールド幅は、左の調整フラグとそれに続く正のフィールド幅として扱われます。負の精度は欠落しているかのように扱われます。単一のフォーマットディレクティブが位置(nn $)引数と非位置引数を混在させる場合、結果は未定義です。

例:printf ( "%1$*d", width, value );

7
jetset