web-dev-qa-db-ja.com

Cの先頭の0を印刷する

郵便番号の場合は01001のように、先頭の0を印刷するのに適した方法を見つけようとしています。番号は1001として格納されますが、それを行うための良い方法は何ですか?

どちらのcaseステートメント/ ifを使用してその数字が何桁であるかを調べてから、印刷用に余分な0を持つchar配列に変換することを考えました。私を避けているprintfフォーマットの構文。

304
zxcv
printf("%05d", zipCode);
513
EvilTeach

正しい解決策は、郵便番号をSTRINGとしてデータベースに格納することです。数字のように見えるかもしれないという事実にもかかわらず、そうではありません。それは各部分が意味を持つコードです。

数字はあなたが算術をするものです。郵便番号はそれではありません。

155
James Curran

最小フィールド幅の前にゼロを配置します。

printf("%05d",zipcode);
44
Adam Bellaire

郵便番号は非常にローカライズされた分野であり、多くの国、例えば英国、カナダでは郵便番号に文字があります。したがって、この例では、いつでも出荷したり、他の国からユーザー/顧客/クライアントなどを入手する場合は、それを保管するためにストリング/ varcharフィールドを使用する必要があります。

しかし一般的な場合には、推奨される答え(printf("%05d", number);)を使うべきです。

16
JeeBee

* 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に関するものですが、 この ページは役に立ちます。

14
Paul Tomblin
sprintf(mystring, "%05d", myInt);

ここで、 "05"は "先行ゼロ付きの5桁を使用する"という意味です。

13
Dan Hewett

printfはさまざまなフォーマットオプションを可能にします。

例:

printf("leading zeros %05d", 123);
7
Trent

郵便番号を数字ではなく文字列として格納すると、大量のトラブル(長期)を軽減できます。

3
pro3carp3

もっと柔軟に..これは固定幅とスペースを詰めた右寄せ数字の行を印刷する例です。

//---- 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

関数とマクロは、printfが読みやすくなるように設計されています。

0
rch

郵便番号を文字配列zipcode []に​​格納する必要がある場合は、これを使用できます。

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
0
Brad Jennings