フラグ
フォーマット指定子のオプションの1つであるフラグについて確認します。
%[フラグ][最小幅][.精度/最大幅]型指定子
フラグは次のものが用意されています。
space 数値が正だった場合に空白を先頭に付けます + 数値が正だった場合に「+」を先頭に付けます - 左詰めに設定(デフォルトは右詰め) 0 右詰めの場合に0詰めを行う # 8進数の場合に「0」、16進数の場合に「0x」又は「0X」、2進数の場合 に「0b」を先頭に付けます。(全て数値が0以外の場合のみ)。
それでは1つ1つ確認していきます。
フラグにスペースを指定
フラグにスペースを記述した場合、正の数値の前に1文字空白を付けます。使い方は次の通りです。
printf("[%d]¥n", 30); printf("[% d]¥n", 30); printf("[% d]¥n", -30);
上記の場合、結果は次のように表示されます。
[30] [ 30] [-30]
フラグに「+」を指定
フラグに「+」を記述した場合、正の数値の前に「+」を付けます。使い方は次の通りです。
printf("[%d]¥n", 30); printf("[%+d]¥n", 30); printf("[%+d]¥n", -30);
上記の場合、結果は次のように表示されます。
[30] [+30] [-30]
フラグに「-」を指定
フラグに「-」を記述した場合、左詰めで表示されます。デフォルトは右詰めです。使い方は次の通りです。
printf("[%4d]¥n", 30); printf("[%-4d]¥n", 30);
右詰めにした場合は最小幅が指定されていなければ必要な桁数のみ表示されるため左詰めとの違いが分かりません。その為、上記では最小幅を「4」に設定しています。(最小幅については別のページで詳しく確認します)。
上記の場合、結果は次のように表示されます。
[ 30] [30 ]
フラグに「0」を指定
フラグに「0」を記述した場合、0詰めで表示されます(右詰めの場合のみ)。使い方は次の通りです。
printf("[%4d]¥n", 30); printf("[%04d]¥n", 30);
最小幅が指定されていなければ必要な桁数のみ表示されるため0詰めは行われません。その為、上記では最小幅を「4」に設定しています。(最小幅については別のページで詳しく確認します)。
上記の場合、結果は次のように表示されます。
[ 30] [0030]
フラグに「#」を指定
フラグに「#」を記述した場合、8進数の場合に「0」、16進数の場合に「0x」又は「0X」、2進数の場合に「0b」を先頭に付けます。ただし数値が0の場合は付きません。使い方は次の通りです。
printf("[%#o]¥n", 30); printf("[%#x]¥n", 30); printf("[%#b]¥n", 30);
上記の場合、結果は次のように表示されます。
[036] [0x1e] [0b11110]
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; printf("[%d]¥n", 30); printf("[% d]¥n", 30); printf("[% d]¥n", -30); printf("[%d]¥n", 30); printf("[%+d]¥n", 30); printf("[%+d]¥n", -30); printf("[%4d]¥n", 30); printf("[%-4d]¥n", 30); printf("[%4d]¥n", 30); printf("[%04d]¥n", 30); printf("[%#o]¥n", 30); printf("[%#x]¥n", 30); printf("[%#b]¥n", 30);
上記を「test4-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )