2012-05-08 7 views
4

私の質問は簡単です。私はprintfを使って、指定された量の先行ゼロで整数を出力したい。ただし、先行ゼロの数は実行時に決定され、先験的には分かりません。どうすればいい?C++でパラメータ化された先行ゼロprintf関数

私は文字の数を知っていたならば、それは

printf("%05d", number); 

だろう(のは5としましょう)しかし、それは5

答えて

9

になります場合、私はあなたが*を使用して幅を渡すことができます知っていません:

printf("%0*d", 5, number); 
+0

あなたの例では、精度精度の前には ''。 ''が必要です。 'printf("%。* d "、5、number)'です。 –

+0

シンプルで完璧 – Chicoscience

+0

@JamesKanzeそう、間違いを修正しました。 –

4

使用することもでき

cout << setw(width_) << setfill('0') << integerVariable_; 

width_は実行時に決定されます。

+0

ありがとう、それはうまくいくでしょうが、私の場合はprintfを使う必要がありました。とにかくありがとう! – Chicoscience

2

私は、大部分のプラットフォームでこれを達成するためにアスタリスクを使用することができます。

int width = whatever(); 
printf("%0*d", width, number); 
+2

これはC標準です( 'printf'ファミリ用)。残念なことに、iostreamではサポートされていません---精度フィールドは積分出力で無視されます。 –

+0

@Ivan K Rafalはすでに同じ答えを提供しています。ちょっとした変更のためにコメントを使用してください。 – amod

+0

@ amod0017:なぜですか?あなたが見ることができるように、著者はそれをまだ更新せず、値をハードコードしました!私は実際にパラメータ化されているので、現在の形でこの答えを好む。 – lpapp

-1

C++ setwとsetfillで使用可能なマニピュレータを使用します。

1

標準溶液は、printf("%.*d", precision, number)です。

printf("%6.3d", 12); // outputs " 012" 
printf("%6.0d", 0); // outputs "  ", without any 0 

printf家族で は、Cで、高精度の書式設定のフィールドには、のようなものを書くことができますので、これは、幅の独立した である1をデフォルト、表示される数字の 最小数を指定します

printf("%6.*d", 3, 12); // outputs " 012" 
printf("%*.3d", 6, 12); // outputs " 012" 
printf("%*.*d", 6, 3, 12); // outputs " 012" 
:幅または精度(あるいはその両方)のいずれかについて、あなたは printfは、引数( intを渡す)から値を拾うようになりますどの '*'、 を指定することができます

残念なことに、ostreamに同等の機能はありません。 の精度は整数を出力するときに無視されます。 ( は精度に型依存の既定値がないためです。 の既定値は6で、それを尊重するすべての型に適用されます)。

関連する問題