
C言語のきほん|printfで表示を整えよう
見やすい表示は、伝わるコードの第一歩。printfの書式を整えて、出力をぐっと読みやすくしよう。
printf は、文字や数値を表示するだけの関数ではありません。
実は、表示の見た目をきれいに整える ための機能がとても充実しています。
たとえば、次のようなことができます。
- 数字を右揃え・左揃えにする
- 桁数をそろえる
- 小数点以下の桁数をそろえる
- 16進数や8進数であることを見た目でわかりやすくする
- 文字列の先頭何文字だけを表示する
こうした整形表示を覚えると、表っぽい出力や見やすいログ表示が作れるようになります。
特に学習中は、値を並べて確認したい場面が多いので、printf の整形はとても役立ちます。
ここでは、printf の書式指定の中でも、フィールド幅・フラグ・精度 を中心に、やさしく丁寧に解説していきます。
サンプルプログラムも、内容を別のシンプルな例に変更して、日本語メッセージ・日本語コメントでわかりやすく説明します。
printfの書式指定の全体像
printf の書式指定は、これまで学んだ %d や %f の前後に追加の指定を書けます。
形としては次のようなイメージです。
%[フラグ][フィールド幅][.精度][修飾子]変換指定子
今回の学習では、特にこの3つを使います。
- フィールド幅
- フラグ
- 精度
修飾子は後の章で詳しく学ぶ内容なので、ここでは無理に覚えなくて大丈夫です。
まずはイメージで理解しよう
printf の書式指定は、%d や %f をそのまま使うだけでなく、間に情報を足せます。
たとえばこんな形です。
%5dこれは「整数を、最低5桁分の幅で表示してね」という意味です。
さらに、
%-5dなら「左詰めで5桁にしてね」になります。
そして、
%.2fなら「小数点以下2桁で表示してね」です。
つまり、printf は「何を表示するか」だけでなく、どう見せるか も指定できる、ということですね。
フィールド幅とは
フィールド幅は、出力全体の横幅(最小の幅) を指定する機能です。
表示する値がその幅より短いときは、足りない分が空白で埋められます。
基本の書き方
- %5d ・・・整数を最低5桁の幅で表示
- %12f ・・・浮動小数点数を最低12桁の幅で表示
例1:右詰め5桁
printf("[%5d]\n", 10);実行結果
[ 10]10 は2桁なので、残り3桁分が空白になります。
デフォルトでは右詰めです。
例2:幅より長い値はそのまま表示
printf("[%3d]\n", 10000);実行結果
[10000]指定した幅 3 より値の桁数 5 のほうが大きいので、切り捨てられたりはしません。
この場合はフィールド幅は無視されて、そのまま表示されます。
例3:小数点もフィールド幅に含まれる
printf("[%12f]\n", 123.456);実行結果
[ 123.456000]ここでの 12 桁には、小数点も含まれます。
この点は少し見落としやすいので、覚えておくと便利です。
フィールド幅を図で見るとわかりやすい

最低5桁の「箱」を用意して、値を右側に入れるイメージです。
フラグとは
フラグは、表示スタイルを変える追加指定 です。
よく使うものを覚えるだけでも、かなり見やすい出力が作れるようになります。
今回よく使うフラグは次の4つです。
| フラグ | 意味 | 例 | 出力例 |
|---|---|---|---|
| - | 左詰め | %-5d | [10 ] |
| + | 正の数にも + を付ける | %+d | +10 |
| # | 表記形式を明示する | %#x | 0xa |
| 0 | 空白の代わりに0で埋める | %05d | 00010 |
フラグ -(左詰め)
通常は右詰めですが、- を付けると左詰めになります。
例:
printf("[%-5d]\n", 10);実行結果
[10 ]表のように並べたいときに便利です。
フラグ +(正の数にも+を付ける)
正の数は普通、符号なしで表示されますが、+ を付けると明示できます。
例:
printf("%+d\n", 10);実行結果
+10増減や差分の表示で、正負をはっきり見せたいときに便利です。
フラグ #(表記形式を明示)
8進数や16進数のときに「何進数か」をわかりやすくします。
16進数の例
printf("%#x\n", 10);実行結果
0xa8進数の例
printf("%#o\n", 10);実行結果
01216進数なら 0x、8進数なら 0 が付きます。
進数を確認したいときにとても見やすくなります。
フラグ 0(0埋め)
幅指定と組み合わせると、空白の代わりに 0 で埋められます。
例:
printf("%05d\n", 10);実行結果
00010ID番号や連番をそろえて表示したいときに便利です。
精度とは
精度は、小数点以下の桁数 や 文字列の最大表示文字数 を指定する機能です。
ドット . のあとに数字を書きます。
基本の書き方
- %.2f ・・・小数点以下2桁
- %.5s ・・・文字列の先頭5文字まで表示
精度で小数点以下の桁数を指定する
例1:小数点以下2桁
printf("[%.2f]\n", 12345.678);実行結果
[12345.68]小数点以下3桁目が 8 なので、2桁に丸められて 12345.68 になります。
例2:フィールド幅と一緒に使う
printf("[%10.2f]\n", 12345.678);実行結果
[ 12345.68]この場合は、
- 全体の幅は10桁
- 小数点以下は2桁
という2つの条件が同時に指定されています。
精度で文字列の最大表示長を指定する
%s にも精度指定が使えます。
このときは小数ではなく、最大何文字表示するか という意味になります。
例:
printf("[%.5s]\n", "abcdefg");実行結果
[abcde]先頭から5文字だけ表示されます。
長い文字列の表示を制限したいときに便利です。
書式指定の読み方を図で整理
たとえば、次の書式指定を見てみましょう。
%10.2f
分解するとこうなります。

この分解に慣れると、複雑そうに見える書式も読みやすくなります。
サンプルプログラムでまとめて確認しよう
ファイル名:5_6_1.c
#include <stdio.h>
int main(void)
{
/* フィールド幅の確認 */
printf("フィールド幅の例\n");
printf("[%-8s]\n", "商品"); /* 左詰め8文字 */
printf("[%5d]\n", 42); /* 右詰め5桁 */
printf("[%10.2f]\n", 98.7654); /* 幅10、小数点以下2桁 */
/* フラグの確認 */
printf("\nフラグの例\n");
printf("左詰め : [%-5d]\n", 42);
printf("符号付き : [%+d]\n", 42);
printf("16進数表記 : [%#x]\n", 42);
printf("0埋め5桁 : [%05d]\n", 42);
/* 精度の確認 */
printf("\n精度の例\n");
printf("小数2桁 : [%.2f]\n", 98.7654);
printf("小数4桁 : [%.4f]\n", 98.7654);
printf("文字列5文字 : [%.5s]\n", "プログラミング入門");
return 0;
}実行結果例
フィールド幅の例
[商品 ]
[ 42]
[ 98.77]
フラグの例
左詰め : [42 ]
符号付き : [+42]
16進数表記 : [0x2a]
0埋め5桁 : [00042]
精度の例
小数2桁 : [98.77]
小数4桁 : [98.7654]
文字列5文字 : [プロ]※ 日本語文字列の %.5s は、環境や文字コードによって見え方が変わることがあります。教材として安定して確認したい場合は、英字文字列で試すのもおすすめです(例: Programming)。
サンプルプログラムのポイント解説
幅指定で数字をそろえると見やすい
printf("[%5d]\n", 42);数字の桁数がバラバラでも、幅をそろえると縦に並べたときに見やすくなります。
表形式の出力でとても役立ちます。
フラグを組み合わせると意味が伝わりやすい
printf("16進数表記 : [%#x]\n", 42);ただ %x で表示するより、%#x のほうが 0x が付くので、16進数だとすぐわかります。
見た目の親切さが上がります。
精度指定で小数の見た目をそろえる
printf("小数2桁 : [%.2f]\n", 98.7654);金額や平均値などは、桁数をそろえたほうが読みやすくなります。
%.2f は実務でもとてもよく使います。
よくあるミスと注意点
フィールド幅は最小幅だと忘れる
%3d と書いても、値が 10000 のように長ければ切り詰められません。
フィールド幅は「最小でもこれだけ確保する」という意味です。
0埋めと左詰めを混同する
- %05d は右詰めで0埋め
- %-5d は左詰めで空白埋め
ここは見た目が似ていて混ざりやすいので、何度か試すと覚えやすいです。
精度指定の意味が型で変わる
- %.2f → 小数点以下2桁
- %.5s → 文字列の先頭5文字
同じ .数字 でも、f と s で意味が違います。
最初は少しややこしく感じますが、使ううちに自然に慣れます。
実践問題
次の実行結果例のようになるように、空欄を埋めてプログラムを完成させてください。
printf のフィールド幅、フラグ、精度を使って表示を整えてみましょう。
問題
#include <stdio.h>
int main(void)
{
printf("右詰め6桁 : [ ① ]\n", 58);
printf("左詰め6桁 : [ ② ]\n", 58);
printf("符号付き表示 : [ ③ ]\n", 58);
printf("0埋め6桁 : [ ④ ]\n", 58);
printf("16進数(明示) : [ ⑤ ]\n", 58);
printf("幅8・小数2桁 : [ ⑥ ]\n", 45.6789);
printf("小数点以下3桁 : [ ⑦ ]\n", 45.6789);
printf("先頭4文字 : [ ⑧ ]\n", "sample");
return 0;
}実行結果例
右詰め6桁 : [ 58]
左詰め6桁 : [58 ]
符号付き表示 : [+58]
0埋め6桁 : [000058]
16進数(明示) : [0x3a]
幅8・小数2桁 : [ 45.68]
小数点以下3桁 : [45.679]
先頭4文字 : [samp]解答例
ファイル名:5_6_2.c
#include <stdio.h>
int main(void)
{
printf("右詰め6桁 : [%6d]\n", 58);
printf("左詰め6桁 : [%-6d]\n", 58);
printf("符号付き表示 : [%+d]\n", 58);
printf("0埋め6桁 : [%06d]\n", 58);
printf("16進数(明示) : [%#x]\n", 58);
printf("幅8・小数2桁 : [%8.2f]\n", 45.6789);
printf("小数点以下3桁 : [%.3f]\n", 45.6789);
printf("先頭4文字 : [%.4s]\n", "sample");
return 0;
}解説
この問題は、printf の整形指定をひととおり練習できる内容です。
① 右詰め6桁
%6d整数を幅6で右詰め表示します。
58 は2桁なので、前に空白が4つ入ります。
② 左詰め6桁
%-6d- フラグを付けることで左詰めになります。
後ろに空白が入ります。
③ 符号付き表示
%+d正の数にも + が付きます。
差分や増減の表示で便利です。
④ 0埋め6桁
%06d幅6で、空白の代わりに0で埋めます。
連番や番号表示でよく使います。
⑤ 16進数(明示)
%#xフラグで 0x が付くので、16進数だとわかりやすくなります。
⑥ 幅8・小数2桁
%8.2f- 全体幅:8
- 小数点以下:2桁
45.6789 は丸められて 45.68 になります。
⑦ 小数点以下3桁
%.3f小数点以下3桁で表示するので、45.6789 は 45.679 に丸められます。
⑧ 先頭4文字
%.4s文字列の先頭から4文字だけ表示します。
sample なら samp になります。
表示を整える力は、そのまま読みやすいプログラムにつながる
printf の整形表示は、最初は少し記号が多く見えるかもしれません。
でも、使えるようになると出力の見た目が一気に良くなります。
- 数字がそろって見やすい
- 小数の桁数がそろう
- 表示の意味がすぐ伝わる
- デバッグ結果を確認しやすい
特に学習中は、printf を「確認用の道具」としてたくさん使うので、整形指定を覚えておくと本当に便利です。
まずは %5d、%-5d、%05d、%.2f、%8.2f あたりを何度か試してみると、感覚がつかみやすくなります。
