郵便番号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));