printfの第1引数やfprintfの第2引数は、出力フォーマットの文字列と呼ばれます。
このフォーマット内では、%の直後で、次に続く引数をどのように出力するか指示しています。
(%d %f など)
そのため、%の文字を出力するには、特別な指示を必要とします。
それは、%を2つ並べます。つまり%%で一つの%を出力します。以下に例を示します。
fprintf(stdout, "%%は、%%を2つ並べて一つを出力させます\n"); |
%は、%を2つ並べて一つを出力させます |
%における幅指定では、0を直後に書くと、
幅に満たない空間を0で埋める指定になります。
0を付けない場合と比較ください。以下では、全て10の幅で表示指示をしている例です。
printf("値は%010.5fです\n", 12.345); printf("値は%010.4fです\n", 12.345); printf("値は%010.3fです\n", 12.345); printf("値は%010.2fです\n", 12.345); printf("値は%010.1fです\n", 12.345); printf("値は%010.0fです\n", 12.345); |
値は0012.34500です 値は00012.3450です 値は000012.345です 値は0000012.35です 値は00000012.3です 値は0000000012です |
また、出力フォーマットの%指定では、10進数の文字並びに変換して出力する場合にdの文字を使いました。
これ以外にも16進数変換にX、8進数変換にo (オーの文字)を%の直後に指定します。
なお、Xを小文字のxにすると、AからF は小文字のaからf になります。
128を16進数で表示させる例です
fprintf(stdout, "%X",128); |
80 |
128を8進数で表示させる例です
printf("%o",128); |
200 |
以下で、0から128までの10進数と16進数と8進数を、並べて表示させました。
printf("%dは\t16進数:%02X 8進数%03o\n", 0, 0, 0); printf("%dは\t16進数:%02X 8進数%03o\n", 1, 1, 1); printf("%dは\t16進数:%02X 8進数%03o\n", 2, 2, 2); printf("%dは\t16進数:%02X 8進数%03o\n", 4, 4, 4); printf("%dは\t16進数:%02X 8進数%03o\n", 8, 8, 8); printf("%dは\t16進数:%02X 8進数%03o\n", 16, 16, 16); printf("%dは\t16進数:%02X 8進数%03o\n", 32, 32, 32); printf("%dは\t16進数:%02X 8進数%03o\n", 64, 64, 64); printf("%dは\t16進数:%02X 8進数%03o\n",128,128,128); |
0は 16進数:00 8進数000 1は 16進数:01 8進数001 2は 16進数:02 8進数002 4は 16進数:04 8進数004 8は 16進数:08 8進数010 16は 16進数:10 8進数020 32は 16進数:20 8進数040 64は 16進数:40 8進数100 128は 16進数:80 8進数200 |
なお '\t' のタブ(tab)を出力させ、16進の表示位置が揃うように細工しています。