Cライブラリ関数 -printf()
説明
Cライブラリ関数int printf(const char *format, ...)フォーマットされた出力を標準出力 stdout に送信します。
printf() 関数の呼び出し形式は次のとおりです。
printf("<格式化字符串>", <参量表>);
宣言
以下が printf() 関数の宣言です。
int printf(const char *format, ...)
引数
formatformat -- これは文字列で、標準出力 stdout に書き込まれるテキストです。埋め込みのフォーマットタグを含めることができ、フォーマットタグは後続の追加引数で指定された値で置き換えられ、必要に応じてフォーマットされます。フォーマットタグの属性は %[flags][width][.precision][length]specifier、具体的な説明は次のとおりです。
| 書式文字 | 意味 |
|---|---|
| a, A |
浮動小数点数を16進数形式で出力します(C99で追加)。 例printf("pi=%a\n", 3.14);出力pi=0x1.91eb86p+1。 |
| d | 符号付き整数を10進数形式で出力します(正の場合は符号を出力しません) |
| o | 符号なし整数を8進数形式で出力します(接頭辞0は出力しません) |
| x,X | 符号なし整数を16進数形式で出力します(接頭辞0xは出力しません) |
| u | 符号なし整数を10進数形式で出力します |
| f | 単精度・倍精度の実数を小数形式で出力します |
| e,E | 単精度・倍精度の実数を指数形式で出力します |
| g,G | %f または %e のうち出力幅が短い方で単精度・倍精度の実数を出力します |
| c | 1文字を出力します |
| s | 文字列を出力します |
| p | ポインタのアドレスを出力します |
| lu | 32ビット符号なし整数 |
| llu | 64ビット符号なし整数 |
| flags(フラグ) | 説明 |
|---|---|
| - | 指定されたフィールド幅内で左揃えにします。デフォルトは右揃えです(width サブ指定子を参照)。 |
| + | 結果の前に強制的にプラスまたはマイナス記号(+ または -)を表示します。つまり、正の数の前には + 記号が表示されます。デフォルトでは、負の数の前にのみ - 記号が表示されます。 |
| 空白 | 記号が書き込まれない場合、その値の前に空白が挿入されます。 |
| # | o、x、X の各指定子と一緒に使用すると、非ゼロ値の前にそれぞれ 0、0x、0X が表示されます。 e、E、f と一緒に使用すると、後ろに数字がない場合でも小数点を含む出力を強制します。デフォルトでは、後ろに数字がない場合、小数点は表示されません。 g または G と一緒に使用すると、結果は e または E を使用した場合と同じになりますが、末尾のゼロは削除されません。 |
| 0 | 指定されたパディングにおいて、数値の左側に空白ではなくゼロ(0)を置きます(width サブ指定子を参照)。 |
| width(幅) | 説明 |
|---|---|
| (number) | 出力する文字の最小数。出力する値がこの数より短い場合、結果は空白で埋められます。出力する値がこの数より長い場合、結果は切り詰められません。 |
| * | 幅が format 文字列内で指定されていない場合は、フォーマットされる引数の前に追加の整数値引数として置かれます。 |
| .precision(精度) | 説明 |
|---|---|
| .number | 整数指定子(d、i、o、u、x、X)の場合: precision は書き込む桁数の最小数を指定します。書き込む値がこの数より短い場合、結果は先頭ゼロで埋められます。書き込む値がこの数より長い場合、結果は切り詰められません。精度 0 は何も文字を書き込まないことを意味します。 e、E、f 指定子の場合: 小数点の後に出力する小数桁数。 g および G 指定子の場合: 出力する最大有効桁数。 s の場合: 出力する最大文字数。デフォルトでは、末尾のヌル文字に遭遇するまで、すべての文字が出力されます。 c タイプの場合: 影響はありません。 精度が指定されていない場合、デフォルトは 1 です。明示的な値なしで指定された場合は、0 と見なされます。 |
| .* | 精度が format 文字列内で指定されていない場合は、フォーマットされる引数の前に追加の整数値引数として置かれます。 |
| length(長さ) | 説明 |
|---|---|
| h | 引数は short int または unsigned short int として解釈されます(整数指定子: i、d、o、u、x、X にのみ適用)。 |
| l | 引数は long int または unsigned long int として解釈され、整数指定子(i、d、o、u、x、X)、および c(ワイド文字を表す)、s(ワイド文字列を表す)に適用されます。 |
| L | 引数は long double として解釈されます(浮動小数点指定子: e、E、f、g、G にのみ適用)。 |
追加引数-- 異なる format 文字列に応じて、関数は一連の追加引数を必要とする場合があります。各引数は、format パラメータで指定された各 % タグを置き換える、挿入される値を含みます。引数の数は % タグの数と同じである必要があります。
戻り値
成功した場合は書き込まれた文字の総数を返し、それ以外の場合は負の数を返します。
例
以下の例は、printf() 関数の使い方を示しています。
例
上記のプログラムをコンパイルして実行すると、次の結果が得られます。
ASCII 值 = 75, 字符 = K ASCII 值 = 76, 字符 = L ASCII 值 = 77, 字符 = M ASCII 值 = 78, 字符 = N ASCII 值 = 79, 字符 = O ASCII 值 = 80, 字符 = P ASCII 值 = 81, 字符 = Q ASCII 值 = 82, 字符 = R ASCII 值 = 83, 字符 = S ASCII 值 = 84, 字符 = T ASCII 值 = 85, 字符 = U ASCII 值 = 86, 字符 = V ASCII 值 = 87, 字符 = W ASCII 值 = 88, 字符 = X ASCII 值 = 89, 字符 = Y ASCII 值 = 90, 字符 = Z ASCII 值 = 91, 字符 = [ ASCII 值 = 92, 字符 = \ ASCII 值 = 93, 字符 = ] ASCII 值 = 94, 字符 = ^ ASCII 值 = 95, 字符 = _ ASCII 值 = 96, 字符 = ` ASCII 值 = 97, 字符 = a ASCII 值 = 98, 字符 = b ASCII 值 = 99, 字符 = c ASCII 值 = 100, 字符 = d
次の例では、さまざまなフォーマットデータを出力します。
例
実行結果は次のとおりです。
字符为 A 字符串为 www.example.com 浮点数为 10.234000 整数为 150 双精度值为 20.123456 八进制值为 226 十六进制值为 96
変換指定子
- %d10進数の符号付き整数
- %u10進数の符号なし整数
- %f浮動小数点数
- %s文字列
- %c単一文字
- %pポインタの値
- %e指数形式の浮動小数点数
- %x, %X16進数で表す符号なし整数
- %o8進数で表す符号なし整数
- %g出力する値を %e または %f のうち出力長が小さい方の方式で出力します
- %pアドレスを出力
- %lu32ビット符号なし整数
- %llu64ビット符号なし整数
- %%パーセント記号そのものを出力します。
フォーマット指定子に加えて、printf() 関数は出力の精度、幅、埋め文字、配置などを制御するためのいくつかのフラグとオプションもサポートしています。例:
- %-10s:左揃えで幅 10 の文字列;
- %5.2f:右揃えで幅 5、小数第2位まで保持する浮動小数点数;
- %#x:0x 接頭辞付きの16進数を出力します。
printf() 関数は可変長引数リストもサポートしており、省略記号を使用して...表すことで、出力する複数の値を指定します。関数内部では、va_start() および va_end() マクロを使用して可変長引数リスト内の値にアクセスできます。例:
例
#include <stdarg.h>
void print_values(int count, ...)
{
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
printf("%d ", va_arg(args, int));
}
va_end(args);
}
int main()
{
print_values(3, 1, 2, 3); // "1 2 3" を出力
return 0;
}
実行出力結果は次のとおりです。
1 2 3その他の拡張