printf() はこれまでにも使ってきたけど改めて。一般的な形式は次のとおり。
printf(制御文字列, ...);
「…」の部分は可変長の引数で、制御文字列内に現れるフォーマット指定子に(数、順番ともに)対応する。printf() 自体は出力した文字数を返す。
フォーマット指定子は次のものがある。
%c | 文字 |
%d | 符号付き10進整数 |
%i | 符号付き10進整数 |
%e | 指数部付き表記(小文字) |
%E | 指数部付き表記(大文字) |
%f | 10進の浮動小数点数 |
%g | %eと%fのいずれか短いほう |
%G | %Eと%fのいずれか短いほう |
%o | 符号なし8進数 |
%s | 文字列 |
%u | 符号なし10進数 |
%x | 符号なし16進数(小文字) |
%X | 符号なし16進数(大文字) |
%p | ポインタを表示 |
%n | 対応する引数は整数へのポインタでなければならず、その領域にこれまで出力された文字数を書き込む |
%% | %記号 |
%%、%c、%p、%n以外は最小フィールド幅指定子と精度指定子を指定できる。また、デフォルトでは数値は右詰めで表示されるけど、-記号をつけることで左詰めにできる。ま、だいたいわかるな。
ちょっとわかりづらいのは %n だ。これは出力するためのものではなくて、出力した文字数を保存するためのものだ。次のプログラムはその例。
#include int main(void) { int i; printf("%d %f\n%n", 100, 123.45, &i); printf("Output %d characters\n", i); return 0; }
takatoh@nightschool $ ./sample_8_5 100 123.450000 Output 15 characters
%n が現れるまでに 15 文字出力したと(15 文字目は改行文字)。