文法:
#include <cstdio> int printf( const char *フォーマット, ... );
printf()関数は、パラメータで渡されたフォーマットと、それ以外の引数に従って、標準出力に出力します。文字列フォーマットは2種類の要素を含んでいます。一つは文字列で、そのままスクリーンに出力されます。もう一つがフォーマットコマンドで、printf()に渡された他の引数をどのように出力するか定義します。通常は、表示したい文字列を含むフォーマット文字列の中に、他の引数と対応する”特殊文字”を埋め込んでしようします。例えば、下記のコードがあったとすると、
char name[20] = "ボブ"; int age = 21; printf( "こんにちわ %s。あなたは %d 歳です。\n", name, age );
以下のように表示されます:
こんにちわ ボブ。あなたは 21 歳です。
%sは、”最初の引数をここに文字列として挿入しなさい”という意味になります。%dは2番目の引数の数値をここに配置しなさいという意味になります。これらの%コードは引数のタイプごとに定義されています。変数の長さ制限などもオプションで指定できます。
| コード | フォーマット |
|---|---|
| %c | 文字列 |
| %d | 符号付き整数 |
| %i | 符号付き整数 |
| %e | 小文字”e”を使用した科学的記数法 |
| %E | 大文字”E”を使用した科学的記数法 |
| %f | 浮動小数点数 |
| %g | %eか%fのどちらか短い方 |
| %G | %Eか%fのどちらか短い方 |
| %o | 8進数 |
| %s | 文字列 |
| %u | 符号なし整数 |
| %x | 小文字の文字列を使用した、符号なし16進数 |
| %X | 大文字の文字列を使用した、符号なし16進数 |
| %p | ポインタ |
| %n | 引数に数値へのポインタを指定すると、%nが登場するまでに出力した文字数を格納します |
%記号とフォーマットコマンドの間に整数を入れると、最短の出力文字数幅を指定することができます。指定された長さに満たない場合には、指定された長さになるまでスペースかゼロが追加されます。もしもゼロを使用したい場合には、文字数指定の数値の前にゼロを入れてください。
%012d
文字数を変数で指定したい場合には、数値の代わりに*記号を入れます:
int width = 12; int age = 100; printf("%*d", width, age);
有効数字の修飾子を付けることができます。指定する場合には.Nという形式(Nは数値)で、フォーマットコマンドの直前に設定します:
%012.4d
フォーマットコマンドによっては、精度指定は異なる意味を持ちます:
フィールド長指定があるところでは、*記号とint型の変数を指定して、精度修飾子に入る値を指定することができます:
const char* msg = "Hello printf"; int string_size = strlen (msg); printf("メッセージ: %.*s", string_size, msg);
%記号の前にマイナス記号を付けない限りは、printf()の出力はすべて右寄せになります。
サンプル:
%-12.4f
この場合には、最低12文字の幅で浮動小数点数が表示されます。実際に数値が入るのは4桁で、左寄せで表示されます。
%d, %i, %o, %u, %xの型指定子の場合には、'l'あるいは'h'の文字を修飾子として設定することで、long型、もしくはshort型のデータ型であるということを明示することができます。例えば、%hdと指定すると、short型の整数の意味になります。
%e, %f, %gの型指定子の場合には、それぞれの文字のlを付けると、double型の変数が渡されるということを指定できます。%g, %g, %e型指定子は'#'という記号をe, f, gの文字の前に入れることができます。この場合は、小数点以下の数値がなくても強制的にピリオドを表示します。
%xの型指定子の場合、'#'文字をxの前に設定すると、16進数の前に'0x'というプリフィックスが表示されます。
%oの型指定子の場合、'#'文字をoの前に設定すると、8進数の前に'0'というプリフィックスが表示されます。
プラス記号'+'を型指定文字の前に入れると、正の数の場合に、'+'を表示するようになります。また空白文字' 'を指定すると、正の整数時に空白文字1文字を強制的に出力するようになります。
printf()の出力文字の中にはエスケープシーケンスを指定することができます。
printf()の返り値は出力した文字数になります。もしエラーが発生した場合には負の数になります。