変換指定子 説 明 x
X
指定されたデータがunsigned int型の内部表現形式に 従っているものと見て、それを16進表記に変換して出 力する。(xだとa〜fが、XだとA〜Fが16進数字とし て使われる。)
c int型(またはchar型)データの下位8ビットを文字コー ドに持つ文字を出力する。
f
指定されたデータがdouble型の内部表現形式に従って いるものと見て、それを次の形式の10進小数表記(指数 部無し)に変換して出力する。
[-] 数字列 . 数字列
出力指定された式がfloat型の場合は、その値がdouble 型に変換された後にprintf関数が呼び出される。
e
E
指定されたデータがdouble型の内部表現形式に従って いるものと見て、それぞれ次の形式の指数部付きの浮動 小数点表記に変換して出力する。
[-] 0以外の数字 . 数字列 e ± 2桁以上の数字列 [-] 0以外の数字 . 数字列 E ± 2桁以上の数字列 出力指定された式がfloat型の場合は、その値がdouble 型に変換された後にprintf関数が呼び出される。
g G
f変換とe(またはE)変換の変換結果のうち、短い方の文
字列を出力する。
s (char *)型の引数データの指す文字から初めて、ヌル文
字’\0’ が現れるまでの文字列をそのまま出力する。
p ポインタ型引数データを番地データと見て、それを16 進数表示で出力する。
n
文字は出力しない。引数で与えられた (int *) 型ポイン タの指す領域に、
このprintf関数で出力されたそれまでの文字数
を格納する。
% ’%%’という変換指定により1つの%文字を出力する。
例 5.11 (s変換指定子) s変換を用いると(あまり好ましくありませんが) 次の様に書く ことも出来る。
printf("%s %f, %s %f %s\n = %f\n",
"底面の半径が", r, "高さが", h, "の円錐の体積", PI*r*r*h/3.0);
関数printfにおける型限定子: 出力データの入った領域の大きさについての認識を調
節するために、次の指定が可能。
5.5. 付録 書式付き出力 —printf— 51
型限定子 説 明
dまたはi変換の時、引数のデータ型はintと見なされる。
u, o, xまたはX変換の時、引数のデータ型は unsigned int と見なされる。
(なし) n変換の時、引数のデータ型が(unsigned) int 型領域へ のポインタと見なされる。
e, E, f, gまたはG変換の時、引数のデータ型は double と見なされる。
dまたはi変換の時、引数のデータ型がshort int と見な される。
h u, o, xまたはX変換の時、引数のデータ型が unsigned short int と見なされる。
n変換の時、引数のデータ型が(unsigned) short int型領 域へのポインタと見なされる。
l 影響の仕方は h型限定子の場合に類似。(但し、この場 合はshort ではなく long int。)
L e, E, f, gまたはG変換の時、引数のデータ型が long
double と見なされる。
関数printfにおける最小フィールド幅の指定: 表の形に揃えて表示したい時のために、
出力フィールド(i.e.出力する場所)の大きさの最小値を正整数で、または星印 *で指定す ることが出来る。[省略も可。]
• 正整数が指定された場合は、作り出された出力文字列が指定された最小フィールド 幅より大きければ、この指定は無視される。指定された最小フィールド幅より小さけ れば、
3 左寄せ指定(「フラグ」部)なら、右に空白列を補って(出力文字列の長さを指定 に合わせて)出力。
3 右寄せ指定&最小フィールド幅が0以外で始まっているなら、左に空白列を補っ て出力。
3 右寄せ指定&最小フィールド幅が0で始まっているなら、左に0の列を補って出力。
• 星印 * が指定された場合は、書式に続く引数の並びの中から* に対応するものが取 り出され、その値が最小フィールド幅として使われる。
関数printfにおける「.精度」の指定: 精度は非負整数または星印* で指定することが
出来る。[省略も可。]
• 精度が省略されピリオドだけ指定された場合は 精度=0 と見なされる。
• 非負整数が指定された場合は、
3 d,i, o, u,x またはX 変換の時は、出力すべき最小の桁数を表す。(ピリオドも精 度も省略された時は 精度=1 と見なされる。)
3 e, E または f 変換の時は、小数点以下の桁数を表す。[ピリオドも精度も省略さ れた時は精度=6 と見なされる。]
3 g または G 変換の時は、最大有効桁数を表す。最後に続く 0 および小数点は印 字されない。 [ピリオドも精度も省略された時は精度=6 と見なされる。]
3 s 変換の時は、引数で指定された文字列の中から出力する最大文字数を表す。[ピ リオドも精度も省略された時は 精度=(引数で指定された文字列の長さ)と見な される。]
• 星印 * が指定された場合は、書式に続く引数の並びの中から* に対応するものが取 り出され、その値が精度の指定値として使われる。
関数printfにおけるフラグ部の指定: 次の指定が可能。
フラグ 説 明
(なし) 右寄せ
- 左寄せ
+ d, i,e, E, f, gまたはG変換の時、非負の値が + 符号付 きで出力される。
空白
d, i,e, E, f, gまたはG変換の時、非負の値が + 符号な しで出力される。[+も空白も指定された時は、+の方が 優先される。]
o変換の時、8進数の出力の前に 0 が付く。
# xまたはX変換の時、16進数の出力の前に0xまたは0X が付く。
e, Eまたはf変換の時、精度=0という指定があっても 必ず小数点が付く。
gまたはG変換の時、末尾の0も省略せずにちゃんと表 示される。
0 出力フィールドを埋める文字として、空白ではなく0(ゼ ロ)を用いる。
□演習 5.12 (理解度チェック) フィールド幅を合わせるために、左に空白でなく0 を埋
めるにはどうするか? また、精度を 0にして整数値 0を出力するとどうなるか?
□演習 5.13 (可変なフィールド幅,精度) 次のようにフィールド幅と精度を可変にしてプ
ログラムを実行してみよ。
printf("x = %*.*f\n", m, n, x);
より詳しくは、浦&原田(編)「C入門」の付録4、ケリー&ポール「CのABC(下)」の 第11.1節、等を参照して下さい。