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 文字目は改行文字)。