web-dev-qa-db-ja.com

パディング付きのprintfフォーマットフロート

次のテストコードは、幅パラメーターを使用したにもかかわらず、望ましくない出力を生成します。

int main(int , char* [])
{
    float test = 1234.5f;
    float test2 = 14.5f;

    printf("ABC %5.1f DEF\n", test);
    printf("ABC %5.1f DEF\n", test2);

    return 0;
}

出力

ABC 1234.5 DEF   
ABC  14.5 DEF

このような出力を実現するには、どのフォーマット文字列を使用するのですか?

ABC 1234.5 DEF   
ABC   14.5 DEF
27
nabulke

以下はすべてを正しく整列させるはずです:

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

これを実行すると、次のようになります。

ABC 1234.5 DEF
ABC   14.5 DEF

問題は、%5.1f5は、整数全体に割り当てられた文字数であり、1234.5は5文字を超えています。これにより、14.5、5文字に収まります。

42
NPE

5文字より広いものを印刷しようとしているので、長さ指定子を大きくします。

printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);

最初の値は「ポイントの前の数字」ではなく、「全長」です。

8
JasonD