機能 |
指定の書式に従って標準出力ストリームへデータを出力することを表す。
※stdoutを指定したfprintf関数と等価
|
定義 |
#include <stdio.h>
int printf ( const char * format, ... );
※C99規格では以下の定義となる
int printf ( const char * restrict format, ... );
|
引数 |
format | 変換書式文字列。
変換指定は文字%から始まり以下の指定が可能である。変換指定以外の文字列は記述どおりに出力される。
※ ? や " などの文字は拡張表記文字で記述する必要がある
変換指定の書式
% [フラグ]option [フィールド幅]option [精度]option [長さ修飾子]option 変換指定子
フラグ | 変換指定の意味を修飾する(0個以上指定可能)
フラグ | 意味 |
- | 変換結果をフィールド内の左詰にする(指定無しは右詰となる) |
+ | 符号付き変換の結果に対して常に符号を表示する |
空白 | 符号付き変換の結果に対して正の値の場合に符号の代わりに空白を表示する |
# | 結果を代替形式に変換する(o変換では最初に0を付加、x変換では最初に0xを付加、a,e,f,g変換では常に小数点文字を表示) |
0 | フィールド幅に対して空白の代わりに0を付加する |
|
フィールド幅 | 変換の結果の文字列がフィールド幅に満たない場合にフィールド幅に満たすまで空白を詰める(非負の10進整数で指定)。
アスタリスク*を用いると可変引数より値(int型)を持ってくる。
|
精度 | 出力する数の個数を表す(ピリオド.の後に10進整数で指定)。変換指定子によって表現は異なる。
変換指定子 | 表現 |
d, i, o, u, x, X | 出力する数字の最小の個数 |
a, A, e, E, f, F | 小数点文字の後ろに出力すべき数字の個数 |
g, G | 最大の有効桁数 |
s | 書き込み最大のバイト数 |
アスタリスク*を用いると可変引数より値(int型)を持ってくる。
|
長さ修飾子 | 引数の大きさを指定する
|
変換指定子 | 適用する変換の種類を指定する
変換指定子 | 意味 |
d, i | int型の引数を[-]dddd形式の10進表記に変換する |
o | unsigned int型の引数をdddd形式の符号無し8進数表記に変換する |
u | unsigned int型の引数をdddd形式の符号無し10進数表記に変換する |
x, X | unsigned int型の引数をdddd形式の符号無し16進数表記に変換する。大文字で指定した場合は大文字表記となる |
f, F | double型の引数を[-]ddd.ddd形式の10進表記に変換する |
e, E | double型の引数を[-]d.ddd e±dd形式の10進表記に変換する |
g, G | double型の引数をf形式またはe形式の表記に変換する |
a, A | (C99規格) double型の引数を[-]0xh.hhhhp±d形式の16進表記に変換する |
c | int型の引数を1文字に変換する |
s | 引数を文字列に変換する |
p | void型ポインタの引数をポインタの表示文字の並びに変換する |
n | 符号付き整数型ポインタの引数に、これまでに出力ストリームに書き込まれた文字数を格納する |
% | %を出力する |
|
|
... | 出力する変数群(可変引数) |
|
戻り値 |
書き出された文字数を返す。
エラーが発生した場合は負の値を返す。
|
実装例 |
#include <stdio.h>
int main(void)
{
int n = 123;
double f = 123.45;
char c = 'a';
char s[] = "abc";
int ret;
ret = printf("%d\n", n); /* 整数値を出力 */
printf("ret=%d\n", ret); /* printfの戻り値を出力 */
printf("double=%f\n", f); /* 浮動小数点値を出力 */
printf("char=%c\n", c); /* 文字を出力 */
printf("string=%s\n", s); /* 文字列を出力 */
printf("double=%7.3f\n", f); /* 幅7文字で小数点以下3桁 */
printf("double=%*.*f\n", 6, 1, f); /* フォールド幅、精度を引数から指定 */
printf("pointer=%#p\n", &n); /* ポインタを出力 */
return 0;
}
|
実行結果 |
123
ret=4
double=123.450000
char=a
string=abc
double=123.450
double= 123.5
pointer=0X001BFC98
|