389

郵便番号0などの01001先頭を印刷する良い方法を見つけようとしています。番号は として保存されますが、それを行う良い方法は何ですか?1001

caseステートメントを使用するifか、数字の桁数を把握してから、印刷用charに余分な 's を含む配列に変換することを考えましたが、フォーマット構文0でこれを行う方法があると思わずにはいられませんprintfそれは私を逃れています。

4

11 に答える 11

638
printf("%05d", zipCode);

0何をパディングするかを5示し、 は整数の幅を示します。

例 1: "%02d"(日付に便利) を使用すると、1 の列の数値にのみゼロが埋め込まれます。たとえば、06代わりに6.

例 2: "%03d"1 の列の 1 つの数値に 2 つのゼロを埋め込み、10 の列の数値に 1 つのゼロを埋め込みます。たとえば、7 番が にパディングされ007、17 番が にパディングされ017ます。

于 2008-09-30T16:36:18.587 に答える
174

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

数値は、算術を行うものです。郵便番号はそうではありません。

于 2008-09-30T16:39:49.387 に答える
48

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

printf("%05d", zipcode);
于 2008-09-30T16:36:37.103 に答える
17
sprintf(mystring, "%05d", myInt);

ここで、「05」は「先頭に 0 を付けて 5 桁を使用する」という意味です。

于 2008-09-30T16:37:38.597 に答える
16

*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 に関するものですが、このページが役立つ場合があります。

于 2008-09-30T16:37:12.453 に答える
16

郵便番号は高度にローカライズされたフィールドであり、多くの国では郵便番号に文字が含まれています (例: UK、カナダ)。したがって、この例では、他の国からユーザー、顧客、クライアントなどを出荷または取得する場合は、string / varchar フィールドを使用して格納する必要があります。

ただし、一般的なケースでは、推奨される回答 ( printf("%05d", number);) を使用する必要があります。

于 2008-09-30T16:42:49.100 に答える
6

printfでは、さまざまな書式設定オプションを使用できます。

例:

printf("leading zeros %05d", 123);
于 2008-09-30T16:36:36.057 に答える
2

郵便番号を、数字ではない文字列として保存するのではなく、文字列として保存すると、(長期的に) トラブルを回避できます。

于 2008-09-30T17:34:26.370 に答える
0

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

snprintf(zipcode, 6, "%05.5d", atoi(zipcode));
于 2015-06-19T14:30:01.000 に答える