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