3.printfを使いこなそう

<h23 -9. フラグ

◆フラグ

フラグについて:
フラグはフィールド内での表示を設定します。

◇+と-と空白

+(プラス)

プログラム:

#include<stdio.h>
main()
{
    printf("%+3d\n",333);
}

結果:
+333

この+は符号を常に出力するフラグです。もちろん-も出力されます。

-(マイナス)

プログラム:

#include<stdio.h>
main()
{
    printf("%-10d\n",333);
    printf("%+10d\n",333);
}

結果:
333
+333

-はフィールド内を左から出力するフラグです。もちろんフィールド幅の値を出力文字数よりも多くしないと意味がありません。

(空白)

空白はあらかじめ符号の部分のスペースを確保してくれます。+と一緒に指定されたときは、+が優先され(空白)は無効になります。

プログラム:

#include<stdio.h>
main()
{
    printf("% d\n",333);
    printf("% d\n",-333);
}

結果:
333
-333

◇#

#は変換指定子によって働きが違うので、1つ1つ説明します。

o :出力される8進数の頭に0を付加します。(0以外)
x,X :出力される16進数の頭に0x,0Xを付加します。(0以外)
f,e,g,F,E,G:常に小数点を表示
g,G:小数点以下の0を出力

プログラム:

#include<stdio.h>
main()
{
    printf("%#o\n",333);
    printf("%#x\n",333);
    printf("%#.0f\n",333.3);
    printf("%#.0e\n",333.3);
    printf("%#.0g\n",333.3);
    printf("%#g\n",333.3);
}

結果:
0515
0x14d
333.
3.e+002
3.e+002
333.300

◇0

0は出力文字の左側の空白を0で埋めます。ただし-が指定されていると無視されてしまいます。また整数型で精度が指定されているときも無視されます。
もちろんフィールド幅は指定しないと意味がありません。

プログラム:

#include<stdio.h>
main()
{
    printf("%010d\n",333);
    printf("%10d\n",333);
}

結果:
0000000333
333