• 検索結果がありません。

付録 書式付き出力 —printf—

ドキュメント内 新潟大学学術リポジトリ (ページ 55-59)

変換指定子 説 明 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節、等を参照して下さい。

ドキュメント内 新潟大学学術リポジトリ (ページ 55-59)