私の質問は簡単です。printf を使用して、指定された量の先行ゼロを含む整数を出力したいと考えています。ただし、先頭のゼロの数は実行時に決定され、先験的にはわかりません。どうすればそれができますか?
文字数(5としましょう)がわかっていれば、
printf("%05d", number);
でも5になるかどうかはわかりません。
次を使用して幅を渡すことができます*
。
printf("%0*d", 5, number);
使用することもできます
cout << setw(width_) << setfill('0') << integerVariable_;
wherewidth_
は実行時に決定されます。
アスタリスクを使用して、ほとんどのプラットフォームでこれを実現できると思います。
int width = whatever();
printf("%0*d", width, number );
ここでの標準的な解決策は次のようになりprintf("%.*d", precision, number)
ます。ファミリではprintf
、C では、精度の書式設定フィールドが表示される最小桁数を指定します。デフォルトは 1 です。これは幅とは無関係であるため、次のように記述できます。
printf("%6.3d", 12); // outputs " 012"
printf("%6.0d", 0); // outputs " ", without any 0
幅または精度のいずれか (または両方) について、 を指定できます'*'
。これによりprintf
、引数から値が取得されます ( を渡します
int
)。
printf("%6.*d", 3, 12); // outputs " 012"
printf("%*.3d", 6, 12); // outputs " 012"
printf("%*.*d", 6, 3, 12); // outputs " 012"
残念ながら、 には同等の機能がありませんostream
。整数を出力する場合、精度は無視されます。(これはおそらく、精度のタイプに依存するデフォルトがないためです。デフォルトは 6 であり、それを尊重するすべてのタイプに適用されます。)
C++ setw および setfill で利用可能なマニピュレータを使用します。