
C言語基礎|printfの変換指定
printfの変換指定 ― 表示を思いどおりに整える
ここまでのプログラムでは、数値をそのまま表示するだけでした。
しかし実際のプログラムでは、
- 数値をきれいにそろえて表示したい。
- 小数点以下の桁数を制御したい。
- 表のように見やすく出力したい。
といった場面がよく出てきます。
そのときに重要になるのが、printf 関数の変換指定です。
この記事では、printf がどのように表示形式を制御しているのかを、具体例を交えながら見ていきましょう。

合計値と平均値を3つの値で求める
まずは、三つの整数値を読み込んで、
合計値と平均値を表示するプログラムを考えます。
平均値は実数で表示したいので、キャストも使います。
サンプルプログラム(変換指定を使った表示)
プロジェクト名:chap2-10-1 ソースファイル名:chap2-10-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 三つの整数値を読み込んで合計値と平均値を表示
#include <stdio.h>
int main(void)
{
int x, y, z;
puts("三つの整数を入力してください。");
printf("整数x:"); scanf("%d", &x);
printf("整数y:"); scanf("%d", &y);
printf("整数z:"); scanf("%d", &z);
int total = x + y + z; // 合計
double average = (double)total / 3; // 平均(キャスト使用)
printf("合計は%5dです。\n", total);
printf("平均は%5.1fです。\n", average);
return 0;
}実行例
三つの整数を入力してください。
整数x:87
整数y:45
整数z:59
合計は 191です。
平均は 63.7です。ここで注目してほしいのが、次の2つの変換指定です。
- %5d
- %5.1f
変換指定は何をしているのか?
printf 関数の書式文字列では、
% から始まる特別な記号によって、表示形式を細かく指定できます。
今回使った指定の意味を整理してみましょう。
| 変換指定 | 意味 |
|---|---|
| %5d | 整数を少なくとも5桁で表示 |
| %5.1f | 実数を少なくとも5桁で表示し、小数点以下は1桁 |
桁数が足りない場合は、左側に空白が補われるのがポイントです。
変換指定の全体構造
変換指定は、次のような部品で構成されています。
% [フラグ] [最小フィールド幅] [.精度] 変換指定子これを図のイメージで表すと、次のようになります。
| 部分 | 役割 |
|---|---|
| フラグ | 表示の寄せ方や 0 埋めなど |
| 最小フィールド幅 | 最低限確保する表示幅 |
| 精度 | 表示する桁数 |
| 変換指定子 | データの型 |
フラグ ― 表示の細かな指定
よく使われるフラグには、次のようなものがあります。
| フラグ | 意味 |
|---|---|
| 0 | 空白の代わりに 0 を詰める。 |
| - | 左寄せで表示する。 |
最小フィールド幅 ― 桁をそろえる
最小フィールド幅は、最低限この桁数は確保するという指定です。
次の例で見てみましょう。
printf("[%d]\n", 123);
printf("[%4d]\n", 123);
printf("[%04d]\n", 123);
printf("[%-4d]\n", 123);表示結果は次のようになります。
[123]
[ 123]
[0123]
[123 ]- 指定した桁数より短い場合は、空白や 0 が補われる。
- 数値が桁数を超える場合は、そのまま表示される。
というルールになっています。
精度 ― 小数点以下を制御する
浮動小数点数では、精度がとても重要です。
printf("[%f]\n", 123.13);
printf("[%.1f]\n", 123.13);
printf("[%6.1f]\n", 123.13);結果は次のとおりです。
[123.130000]
[123.1]
[ 123.1]精度を省略した場合、
小数点以下は6桁 表示されるのが printf の標準動作です。
変換指定子 ― 型を決める最重要ポイント
最後に指定する文字が、変換指定子です。
| 指定子 | 対応する型 | 内容 |
|---|---|---|
| d | int | 10進整数 |
| f | double | 浮動小数点数 |
型と指定子が合っていないと、
正しく表示されなかったり、未定義動作になることがあります。
ここまでのポイントまとめ
- printf の変換指定は表示形式を細かく制御できる。
- 桁揃えや小数点以下の桁数指定にとても便利
- 数値の型に合った変換指定子を使うことが重要
演習問題
演習 2-6
身長を整数値として読み込み、
標準体重を実数で表示するプログラムを作成せよ。
標準体重は
(身長 − 100)× 0.9
によって求め、小数点以下を1桁だけ表示すること。
解答例
プロジェクト名:chap2-10-2 ソースファイル名:chap2-10-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int height;
double weight;
printf("身長を入力せよ:");
scanf("%d", &height);
weight = (height - 100) * 0.9;
printf("標準体重は%5.1fです。\n", weight);
return 0;
}