回答:
printf("%05d", zipCode);
0
あなたとパディングとされているかを示す5
ショー整数の長さ。たとえば、"%02d"
(日付に便利)を使用する場合、これは1の列の数値にゼロを埋め込むだけです(つまり、の06
代わりに6
)。例2では、"%03d"
1の列の1つの数値に対して2つのゼロを埋め、10の列の数値に対して1つのゼロを埋めます。すなわち。(数値7は埋め込み007
、数値17は埋め込み017
)。
正しい解決策は、郵便番号をデータベースにSTRINGとして保存することです。数字のように見えるかもしれませんが、そうではありません。これは、各部分に意味があるコードです。
数はあなたが算数をすることです。郵便番号はそうではありません。
* NIXマシンを使用している場合:
man 3 printf
次のようなマニュアルページが表示されます。
0値にはゼロを埋め込む必要があります。d、i、o、u、x、X、a、A、e、E、f、F、g、およびG変換の場合、変換された値の左側には、ブランクではなくゼロが埋め込まれます。0フラグと-フラグの両方が表示される場合、0フラグは無視されます。数値変換で精度が指定されている場合(d、i、o、u、x、およびX)、0フラグは無視されます。その他の変換の場合、動作は未定義です。
質問はC向けですが、このページは役立つかもしれません。
man
コマンドに数値引数を指定すると、その特定のセクションに絞り込まれます。これがないと、printf
C関数の代わりにシェルコマンドのマニュアルページが表示されます。
より柔軟性があります..これは、幅が固定された右揃えの行とスペースパディングの行を印刷する例です。
//---- Header
std::string getFmt ( int wid, long val )
{
char buf[64];
sprintf ( buf, "% *ld", wid, val );
return buf;
}
#define FMT (getFmt(8,x).c_str())
//---- Put to use
printf ( " COUNT USED FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );
//-------- Output
COUNT USED FREE
A: 354 148523 3283
B: 54138259 12392759 200391
C: 91239 3281 61423
関数とマクロは、printfsが読みやすくなるように設計されています。
#define FMT(x) (getFmt(8,x).c_str())
(xパラメータに注意!)のように関数を定義するつもりのようです。
郵便番号を文字配列zipcode []に格納する必要がある場合は、これを使用できます。
snprintf( zipcode, 6, "%05.5d", atoi(zipcode));