郵便番号0
などの01001
先頭を印刷する良い方法を見つけようとしています。番号は として保存されますが、それを行う良い方法は何ですか?1001
case
ステートメントを使用するif
か、数字の桁数を把握してから、印刷用char
に余分な 's を含む配列に変換することを考えましたが、フォーマット構文0
でこれを行う方法があると思わずにはいられませんprintf
それは私を逃れています。
printf("%05d", zipCode);
は0
何をパディングするかを5
示し、 は整数の幅を示します。
例 1: "%02d"
(日付に便利) を使用すると、1 の列の数値にのみゼロが埋め込まれます。たとえば、06
代わりに6
.
例 2: "%03d"
1 の列の 1 つの数値に 2 つのゼロを埋め込み、10 の列の数値に 1 つのゼロを埋め込みます。たとえば、7 番が にパディングされ007
、17 番が にパディングされ017
ます。
正しい解決策は、郵便番号をデータベースに STRING として格納することです。数字のように見えるかもしれませんが、そうではありません。各部分に意味があるコードです。
数値は、算術を行うものです。郵便番号はそうではありません。
最小フィールド幅の前にゼロを配置します。
printf("%05d", zipcode);
sprintf(mystring, "%05d", myInt);
ここで、「05」は「先頭に 0 を付けて 5 桁を使用する」という意味です。
*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 に関するものですが、このページが役立つ場合があります。
郵便番号は高度にローカライズされたフィールドであり、多くの国では郵便番号に文字が含まれています (例: UK、カナダ)。したがって、この例では、他の国からユーザー、顧客、クライアントなどを出荷または取得する場合は、string / varchar フィールドを使用して格納する必要があります。
ただし、一般的なケースでは、推奨される回答 ( printf("%05d", number);
) を使用する必要があります。
printfでは、さまざまな書式設定オプションを使用できます。
例:
printf("leading zeros %05d", 123);
郵便番号を、数字ではない文字列として保存するのではなく、文字列として保存すると、(長期的に) トラブルを回避できます。
郵便番号を文字配列に格納する必要がある場合はzipcode[]
、次のように使用できます。
snprintf(zipcode, 6, "%05.5d", atoi(zipcode));