printfの様々な書式指定①(数値の場合)
桁数の指定
printf()関数の書式指定で%dを指定すると整数を表示できましたが、次のように、桁数を指定することも可能です。
整数の桁ぞろえ
printf-ex1:main.c#include <stdio.h> void main(){ printf("%05d¥n", 100); // 5桁で100を表示(空白部分は0で埋める) printf("%5d¥n", 100); // 5桁で100を表示(空白部分はスペースで埋める) }
100
%dの前に、数値を書けば、その桁に合わせて数値を表示します。また、さらにその数値の前に、0を入れれば、空白部分に0を入れた数値が表示されます。
実数の桁ぞろえ
続いて、実数の桁ぞろえのケースを見て見ましょう。実数の場合は、小数点以下の値もあるので、そちらもあわせて設定しておく必要があります。
printf-ex2:main.c#include <stdio.h> void main(){ // 空白部分に0がつかないケース printf("%10.2f¥n",123.456); // 全10桁。小数点以下2桁 printf("%10.3f¥n",123.456); // 全10桁。小数点以下3桁 printf("%10.4f¥n",123.456); // 全10桁。小数点以下4桁 // 空白部分に0がつくケース printf("%010.02f¥n",123.456); // 全10桁。小数点以下2桁 printf("%010.03f¥n",123.456); // 全10桁。小数点以下3桁 printf("%010.04f¥n",123.456); // 全10桁。小数点以下4桁 }
000123.456
00123.4560
0000123.46
000123.456
00123.4560
まずは、5行目から7行目のケースを見てください。最初に来る桁数が、全体の桁数を表します。この場合、小数点を含んだ実数を、すべて10桁であらわすことを意味します。そして、.(ピリオド)以下の数値が、小数点以下の桁数です。%10.4fとすれば、小数点以下は4桁であらわされます。
5行目の結果からわかるとおり、小数点以下の位が少ない場合は、四捨五入され、逆にあまる場合は、余った部分に0が表示されます。
9行目から、12行目は、先頭に0がつくケースです。考え方は、整数の場合と一緒です。
printfの様々な書式指定②(文字列の場合)
文字列の表示方法の指定
文字列の場合も、同様に様々な操作ができます。文字列の表示は、%sを使いますが、この場合も先頭に様々な記述をすることにより、色々な表示方法が実現できます。まずは、以下のサンプルを見てください。
printf-ex3:main.c#include <stdio.h> void main(){ printf("%10s¥n", "ABCDE"); // 右詰め10文字(余りは空白) printf("%-10s¥n", "ABCDE"); // 左詰め10文字(余りは空白) printf("%.2s¥n", "ABCDE"); // 先頭2文字のみ表示 }
ABCDE
AB
%とsの間に、「10s」と指定することで、10文字の文字列の中で、右詰めで文字列が表示されます。文字列のない部分は、空白で補完されます。また、「-10s」とすれば、10文字での左詰めです。さらに「.2s」とすることで、文字列の先頭2文字のみが表示されています。このようにして、文字列も様々な操作をすることが可能です。
printfの様々な書式指定③(誤った型の指定)
また、printf()での型の指定は、間違いを起こしやすいので注意が必要です。明らかなエラーにはビルドエラーが出るのですが、エラーが出ない場合も少なくなく、やっかいです。そこで、ここではよくあるprintf()の間違いを紹介します。
printf-ex4:main.c#include <stdio.h> void main(){ printf("%d¥n", 1, 2); // きちんと表示できないケース① ~ %dの数が足りない。 printf("%d¥n"); // きちんと表示できないケース② ~ 表示する内容がない。 printf("%d¥", "ABCDE"); // きちんと表示できないケース③ ~ 型が違う。 printf("%s¥", 1); // きちんと表示できないケース④ ~ 実行時エラー。 }
0
9328732
4行目のケースは、表示する数値に対して、%dの数が足りないようなケースです。先頭の1しか表示されません。また、5行目は、%dがあるものの、そのあとに数値が指定されていません。エラーにはなりませんが、かわりに0が表示されています。
さらに6行目と7行目は、型の違う値を指定するケースです。6行目のケースは、でたらめな値が表示されますが、7行目のようなケースは、実行時エラーが発生します。このように、printf()の書式の使い方を誤ると、ビルドエラーは出ないものの、思いかけない動作をしたり、プログラムが異常終了したりしますので、気をつけましょう。