Cライブラリ関数 -printf()

C標準ライブラリ - <stdio.h>

説明

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() 関数の使い方を示しています。

例

#include <stdio.h> int main () { int ch; for( ch = 75 ; ch <= 100; ch++ ) { printf("ASCII 値 = %d, 文字 = %c\n", ch , ch ); } return(0); }

上記のプログラムをコンパイルして実行すると、次の結果が得られます。

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

次の例では、さまざまなフォーマットデータを出力します。

例

#include <stdio.h> int main() { char ch = 'A'; char str[20] = "www.example.com"; float flt = 10.234; int no = 150; double dbl = 20.123456; printf("文字は %c\n", ch); printf("文字列は %s\n" , str); printf("浮動小数点数は %f\n", flt); printf("整数は %d\n" , no); printf("倍精度の値は %lf\n", dbl); printf("8進数の値は %o\n", no); printf("16進数の値は %x\n", no); return 0; }

実行結果は次のとおりです。

字符为 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 <stdio.h>
#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

C標準ライブラリ - <stdio.h>

その他の拡張