No.10 書式指定子について
今回は、変換指定子の書式指定について解説します。
前回の記事をまだ見ていない方は、下記のリンクからぜひ見てください。
前回の記事を見てからこの記事を見ると理解しやすいです。↓
また、わからない点があればぜひコメントお願いします。
わかりやすいように更新させていただきます。
変換指定子の書式指定子とは
書式指定子とは No.6 で解説した変換指定子での出力を、更に細かく設定するものです。
主な書式指定子には次の3つがあります。
フラグ指定子
幅指定子
精度指定子
書式指定子は変換指定子の % の後に書きます。
ここからはそれぞれについて解説していきます。
フラグ指定子について
フラグ指定子とは、出力などのときにその形式をより細かく制御するために使用される指定子です。
主なフラグ指定子をまとめました。↓
※接頭辞とはその数字の記数法がわかるように書くものです。
(例)
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.14159;
// 左揃え
printf("左揃え: %-10d\n", num); // 出力: "左揃え: 42 "
// プラス記号を表示
printf("プラス記号: %+d\n", num); // 出力: "プラス記号: +42"
// 0埋め
printf("0埋め: %05d\n", num); // 出力: "0埋め: 00042"
// 8進数の接頭辞を付ける
printf("8進数の接頭辞: %#o\n", num); // 出力: "8進数の接頭辞: 052"
// 16進数の接頭辞を付ける
printf("16進数の接頭辞: %#x\n", num); // 出力: "16進数の接頭辞: 0x2a"
// 正の数値の前に空白を追加
printf("空白を追加: % d\n", num); // 出力: "空白を追加: 42"
// 小数点以下の精度を指定
printf("小数点以下の精度: %.2f\n", pi); // 出力: "小数点以下の精度: 3.14"
return 0;
}
幅指定子について
幅指定師とは、出力する値の幅を指定するものです。
指定子した幅よりも出力する値が小さい場合は右揃えで空白が埋められます。
変換指定子の % のあとに任意の数値を指定します。
(例)
#include <stdio.h>
int main() {
int num = 42;
printf("%5d", num); // 出力: " 42" (空白を含む)
return 0;
}
精度指定子とは
精度指定子とは、数値や文字列を表示する際に、その表示形式を細かく制御するために使うものです。
特に浮動小数点数の小数点以下の桁数や、文字列の最大表示文字数を指定できます。
変換指定子のあとにドット (.) をつけ任意の数値を記述します。
(例)
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.14159;
char str[] = "Hello, world!";
// 整数の精度指定
printf("整数の精度: %.5d\n", num); // 出力: "00042"
// 浮動小数点数の精度指定
printf("浮動小数点数の精度: %.3f\n", pi); // 出力: "3.142"
// 文字列の精度指定
printf("文字列の精度: %.5s\n", str); // 出力: "Hello"
// 精度指定と幅指定を組み合わせ
printf("幅と精度指定: %8.3f\n", pi); // 出力: " 3.142" (幅8、精度3)
// 負の数の浮動小数点数の精度指定
float neg_num = -123.456;
printf("負の数の浮動小数点数: %.2f\n", neg_num); // 出力: "-123.46"
return 0;
}
書式指定子の優先順位
1 フラグ指定子 (-, +, #, 0, )
左揃えやプラス記号の追加など、出力の配置や形式を制御します。
2 幅指定子
出力全体の幅を指定し、必要に応じて空白やゼロで埋めます。
3 精度指定子
浮動小数点数の小数点以下の桁数や、文字列の最大表示文字数を指定します
この中で順位が高いほど、変換指定子の % の近くに書きます
問題
以下のコードを実行した場合、出力はどうなりますか↓
#include <stdio.h>
int main() {
int num = 123;
printf("%-+#08.3d\n", num);
printf("%+08.2f\n", (float)num);
return 0;
}
回答
+1230000
+0123.00
今回は以上です。