3-7. フィールド幅
◆フィールド幅
-フィールド幅とは?
まず、今までどおりの方法で3×3の行列を表示してみます。
#include<stdio.h> main() { int i,j; int matrix[3][3]={{12,34,46}, {643,2,45}, {435,34,2545}}; for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%d ",matrix[i][j]); printf("\n"); } }
結果:
12 34 46
643 2 45
435 34 2545
これでは、各要素が揃ってないので見づらいですね。
スペースで揃えればこの場合何とかなりますが、配列の数値が未知数だとうまくできません。
そこで必要なのがフィールド幅の指定です。
#include<stdio.h> main() { int i,j; int matrix[3][3]={{12,34,46}, {643,2,45}, {435,34,2545}}; for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%4d ",matrix[i][j]); printf("\n"); } }
% と d の間に 4 を入力しました。これがフィールド幅の指定で、これを実行すると、
結果: 12 34 46 643 2 45 435 34 2545
となり、きれいに表示されました。この 4 の意味は『4桁の幅で表示』になります。もし、このときに数値が4桁を超えたばあいはその数値のみそのまま表示されます。
#include<stdio.h> main() { int i,j; int matrix[3][3]={{12,34,46}, {687643,2,45}, {435,34,2545}}; for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%4d ",matrix[i][j]); printf("\n"); } }
結果: 12 34 46 687643 2 45 435 34 2545
2行目のはじめの数値が6桁なのでそれ以降右側はズレてしまいました。
今から整数型以外でのフィールド幅について確認も含めてやってみます。
◇%f の場合
#include<stdio.h> main() { int i,j; double matrix[3][3]={{12.33,34.2,46.456}, {687643.44,2.3,45.1}, {435.4,3.4,25.45}}; for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%15f ",matrix[i][j]); printf("\n"); } }
結果:
12.330000 34.200000 46.456000 687643.440000 2.300000 45.100000 435.400000 3.400000 25.450000
◇%e の場合
#include<stdio.h> main() { int i,j; double matrix[3][3]={{12.33,34.2,46.456}, {687643.44,2.3,45.1}, {435.4,3.4,25.45}}; for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%15e ",matrix[i][j]); printf("\n"); } }
結果:
1.233000e+001 3.420000e+001 4.645600e+001 6.876434e+005 2.300000e+000 4.510000e+001 4.354000e+002 3.400000e+000 2.545000e+001
◇%g の場合
#include<stdio.h> main() { int i,j; double matrix[3][3]={{12.33,34.2,46.456}, {687643.44,2.3,45.1}, {435.4,3.4,25.45}}; for(i=0;i<3;i++){ for(j=0;j<3;j++)printf("%15g ",matrix[i][j]); printf("\n"); } }
結果:
12.33 34.2 46.456 687643 2.3 45.1 435.4 3.4 25.45
◇%s の場合
#include<stdio.h> main() { int i; char str[3][12]={"おはよう","こんにちは","こんばんは"}; for(i=0;i<3;i++){ printf("%15s ",str[i]); printf("\n"); } }
結果:
おはよう こんにちは こんばんは
となり変換型に関係なく15文字分の領域を確保して右端をそろえた状態で出力されます。
◇アスタリスクを使ったフィールド幅指定
早速ですが、例を下に示します。
#include<stdio.h> main() { int i; for(i=1;i<10;i++)printf("%*d",2,i); }
結果:
1 2 3 4 5 6 7 8 9
このようにアスタリスクを使うとそのアスタリスクに対応する整数型の定数(変数)をフィールド幅として定義します。
これは、フィールド幅を変数の値によって決めたいときに有効な方法です。
ですから、以下のような事がアスタリスクによってできます。
#include<stdio.h> main() { int i; for(i=1;i<10;i++)printf("%*d\n",i,i); }
結果:
1 2 3 4 5 6 7 8 9