知っていると便利な規則 printf その2

 %を表示させるには?

printfの第1引数やfprintfの第2引数は、出力フォーマットの文字列と呼ばれます。
このフォーマット内では、%の直後で、次に続く引数をどのように出力するか指示しています。 (%d %f など)
そのため、%の文字を出力するには、特別な指示を必要とします。
それは、%を2つ並べます。つまり%%で一つの%を出力します。以下に例を示します。

fprintf(stdout, "%%は、%%を2つ並べて一つを出力させます\n");
%は、%を2つ並べて一つを出力させます

 0のゼロで空間を埋める指示

%における幅指定では、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です

 8進数や16進数出力指示

また、出力フォーマットの%指定では、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進の表示位置が揃うように細工しています。