次のテストコードは、幅パラメーターを使用したにもかかわらず、望ましくない出力を生成します。
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
以下はすべてを正しく整列させるはずです:
printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);
これを実行すると、次のようになります。
ABC 1234.5 DEF
ABC 14.5 DEF
問題は、%5.1f
、5
は、整数全体に割り当てられた文字数であり、1234.5
は5文字を超えています。これにより、14.5
、5文字に収まります。
5文字より広いものを印刷しようとしているので、長さ指定子を大きくします。
printf("ABC %6.1f DEF\n", test);
printf("ABC %6.1f DEF\n", test2);
最初の値は「ポイントの前の数字」ではなく、「全長」です。