6日でできる 新C言語入門|printf関数と書式指定子

数値も文字も、思いどおりの形で表示する。
printf関数と書式指定子を理解して、C言語の出力を使いこなそう。

C言語で画面に文字や数値を表示するときによく使うのがprintf関数です。C言語の学習を始めると、まず文字列を表示するところから入ることが多いですが、実際のプログラムでは文字列だけでなく、整数、小数、文字、計算結果など、さまざまな値を画面に出力します。

そこで重要になるのが書式指定子です。書式指定子とは、printf関数の中で値をどのような形式で表示するかを指定するための記号です。たとえば、整数を表示したいときは%d、小数を表示したいときは%f、文字列を表示したいときは%sのように使います。

C言語では、値には型があります。整数にはint型、小数にはdouble型、1文字にはchar型、文字列にはchar型の配列などが使われます。printf関数で値を表示するときは、この型に合った書式指定子を使うことが大切です。型と書式指定子が合っていないと、正しく表示されなかったり、警告や思わぬ動作につながったりすることがあります。

また、文字や文字列を扱うときには、文字コードの考え方も関係します。コンピュータは文字をそのまま文字として覚えているわけではなく、内部では数値として管理しています。半角英字のAはASCIIコードでは65として扱われ、日本語の文字はUTF-8などの文字コードで複数バイトとして表現されることがあります。

この記事では、printf関数と書式指定子の基本、整数や小数、文字列の表示方法、文字と文字列の違い、文字コードを意識する理由について、C言語学習者にも分かりやすく解説していきます。

printf関数は値を整えて表示するための関数

printf関数は、標準出力へ文字や値を表示するための関数です。標準出力とは、通常はコンソール画面のことを指します。C言語の入門では、プログラムの結果を確認するためにprintf関数をよく使います。

printf関数では、ただ文字列を表示するだけでなく、文字列の中に値を埋め込んで表示できます。このとき、値を入れる場所を示すのが書式指定子です。

たとえば、文章の中に整数を入れたい場合、表示したい位置に%dを書き、その後ろに表示する値を指定します。printf関数は、書式指定子の位置に値を当てはめて画面に表示します。

要素役割
printf関数文字列や値を画面に表示する
書式文字列表示する文章や書式指定子を含む文字列
書式指定子値をどの形式で表示するかを表す
引数書式指定子に対応して表示される値
\n表示後に改行するエスケープシーケンス

printf関数を使うには、標準入出力の機能を利用するために#include <stdio.h>を記述します。stdio.hを読み込むことで、printf関数を使えるようになります。

図:printf関数と書式指定子の関係

この図から分かること

この図から分かるのは、printf関数では、書式指定子を使って文字列の中に値を埋め込めるという点です。

%sの位置には文字列、%dの位置には整数、%cの位置には1文字が表示されます。printf関数は、書式文字列の中にある書式指定子を見て、後ろに指定された値を順番に当てはめます。C言語で見やすい表示を作るには、この対応関係を理解することが大切です。

書式指定子を使ったサンプルプログラム

まずは、書式指定子を使って文字列、整数、小数、1文字を表示するプログラムを見てみましょう。ここでは、学習用の商品情報を表示する例にしています。

プロジェクト/ファイル名: Lesson12_1/main.c

#include <stdio.h>

int main(void) {
    // 文字列と整数を組み合わせて表示する
    printf("購入した商品は%sです。価格は%d円です。\n", "ノート", 180);

    // 1文字を表示する
    printf("評価ランクは%cです。\n", 'A');

    // 小数と整数を使った計算結果を表示する
    printf("%f × %d = %f\n", 2.5, 4, 2.5 * 4);

    return 0;
}

実行結果

購入した商品はノートです。価格は180円です。
評価ランクはAです。
2.500000 × 4 = 10.000000

このプログラムでは、%s、%d、%c、%fという書式指定子を使っています。%sは文字列、%dは整数、%cは1文字、%fは小数を表示するための指定です。

printf関数では、書式指定子の数と、後ろに指定する値の数を合わせる必要があります。たとえば、%sと%dを使う場合は、それぞれに対応する文字列と整数を後ろに指定します。

サンプルプログラムの各行を確認する

サンプルプログラムのprintf関数は、表示したい文章の中に書式指定子を入れています。書式指定子は、あとから渡した値と対応します。

表示内容使用している書式指定子対応する値
商品名を表示%s"ノート"
価格を表示%d180
評価ランクを表示%c'A'
小数を表示%f2.5
整数を表示%d4
計算結果を表示%f2.5 * 4

1つ目のprintf関数では、%sの場所にノートが入り、%dの場所に180が入ります。これにより、文章の中に値を自然に組み込んで表示できます。

2つ目のprintf関数では、%cを使って1文字を表示しています。C言語では、1文字はchar型として扱われることが多く、文字定数はシングルクオーテーションで囲みます。

3つ目のprintf関数では、小数と整数、計算結果を表示しています。%fを使うと、小数は標準では小数点以下6桁で表示されます。そのため、2.5は2.500000のように表示されます。

主な書式指定子一覧

printf関数では、表示したい値の種類に合わせて書式指定子を選びます。代表的なものを整理すると、次のようになります。

書式指定子意味表示する値の例
%d整数を10進数で表示する10、-4、3 + 7
%i整数を10進数で表示する8、12 - 2
%f小数を10進数で表示する2.5、1.0 + 1.8
%lf小数を10進数で表示する1.5、2.0 * 2
%c1文字を表示する'A'、'Z'
%s文字列を表示する"Hello"、"さくら"

printf関数でdouble型の値を表示するときは、通常%fを使えます。%lfについては、scanf関数ではdouble型の入力で重要になりますが、printf関数では多くの環境で%fと同じように扱われます。入門段階では、小数を表示するときは%fを基本として覚えると分かりやすいです。

書式指定子と値の型を合わせる

書式指定子を使うときに大切なのは、表示したい値の型と書式指定子を合わせることです。たとえば、整数を表示するなら%d、文字列を表示するなら%s、小数を表示するなら%fを使います。

表示したい値主な型書式指定子
整数int%d
小数double%f
1文字char%c
文字列char型配列%s

型と書式指定子が合っていないと、表示が崩れたり、警告が出たり、正しくない値が表示されたりすることがあります。

C言語では、コンパイラがある程度チェックしてくれる場合もありますが、printf関数の書式指定子は開発者が正しく指定する必要があります。特に、%dと%f、%cと%sの使い分けは入門段階でしっかり押さえておきたい部分です。

図:書式指定子と値の型の対応

この図から分かること

この図から分かるのは、printf関数では、値の型に合った書式指定子を選ぶ必要があるという点です。

整数には%d、小数には%f、1文字には%c、文字列には%sを使います。書式指定子は、表示の見た目を決めるだけでなく、printf関数が後ろの値をどのように解釈するかにも関係します。そのため、型と書式指定子の対応を意識することが大切です。

文字と文字列の違い

C言語では、文字と文字列は別のものとして扱います。1文字を表す場合はchar型を使い、文字列を表す場合はchar型の配列を使います。

文字は、1つの文字を表します。たとえば、AやZのような半角英字1文字を扱う場合に使います。一方、文字列は複数の文字が並んだものです。こんにちはやC言語のような文章を扱うときは文字列になります。

種類内容表示に使う書式指定子
文字1つの文字%c
文字列複数の文字の並び%s

C言語では、文字はシングルクオーテーションで囲み、文字列はダブルクオーテーションで囲みます。これはとても重要な違いです。

たとえば、Aという1文字を表す場合はシングルクオーテーションを使います。一方、ABCや日本語のような文字列を表す場合はダブルクオーテーションを使います。

文字と文字列を表示するサンプルプログラム

次に、char型の文字と、char型配列の文字列を表示するプログラムを見てみましょう。

プロジェクト/ファイル名: Lesson12_2/main.c

#include <stdio.h>

int main(void) {
    // 半角英字1文字をchar型の変数に入れる
    char rank = 'B';

    // 日本語の文字列をchar型配列に入れる
    char message[] = "書式指定子の確認";

    // 1文字は%cで表示する
    printf("ランクを1文字で表示:%c\n", rank);

    // 文字列は%sで表示する
    printf("メッセージを表示:%s\n", message);

    return 0;
}

実行結果

ランクを1文字で表示:B
メッセージを表示:書式指定子の確認

このプログラムでは、char型の変数rankに半角英字Bを入れています。このような1文字は%cで表示します。

一方、messageはchar型の配列です。文字列を扱うため、表示には%sを使います。C言語では、文字列は文字の並びとして扱われ、末尾には文字列の終わりを示すヌル文字が置かれます。

日本語の1文字をchar型で扱うときの注意

C言語では、char型は基本的に1バイトの文字を扱うための型です。半角英字や半角数字のように1バイトで表現できる文字は扱いやすいですが、日本語の文字は多くの場合、複数バイトで表現されます。

そのため、日本語の1文字をchar型の1文字として扱おうとすると、環境によってうまく扱えないことがあります。入門段階では、日本語は1文字として%cで扱うより、文字列として%sで表示するほうが分かりやすく安全です。

扱いたいもの入門段階での考え方
半角英字1文字char型と%cで扱いやすい
半角数字1文字char型と%cで扱いやすい
日本語1文字複数バイトになるため注意が必要
日本語の文章文字列として%sで扱うと分かりやすい

C言語で日本語を扱うときは、文字コードや実行環境の影響を受けます。Visual Studio 2026で日本語文字列を表示する場合も、ソースファイルの文字コードやコンソールの表示設定によって文字化けすることがあります。

文字コードとは

文字コードとは、文字をコンピュータ内部で数値として表すためのルールです。コンピュータは、文字をそのままの形で記憶しているのではなく、数値の並びとして扱っています。

たとえば、半角英字のAはASCIIコードでは65という数値に対応します。半角数字の1はASCIIコードでは49です。このように、文字と数値の対応表のようなものが文字コードです。

文字代表的なコード値備考
A65ASCIIで表現される半角英字
149ASCIIで表現される半角数字
複数バイトUTF-8やShift_JISなどで表現される
複数バイト日本語は文字コードによって表現が変わる

日本語の文字は、ASCIIの範囲だけでは表現できません。そのため、UTF-8やShift_JISなどの文字コードが使われます。文字コードが合っていないと、ソースコード上では正しく見えていても、実行結果で文字化けすることがあります。

ASCIIコードと日本語文字の違い

ASCIIコードは、半角英字、半角数字、基本的な記号などを表すためによく使われる文字コードです。AやB、1や2のような文字は、ASCIIコードで1バイトの値として表現できます。

一方、日本語の文字は、ひらがな、カタカナ、漢字など多くの文字を含むため、1バイトだけでは表現できません。UTF-8では、日本語の文字は多くの場合、複数バイトで表されます。

種類特徴
半角英字A、B、CASCIIで扱いやすい
半角数字0、1、2ASCIIで扱いやすい
基本記号+、-、*、/ASCIIで扱いやすい
日本語あ、漢、語複数バイトで表されることが多い

C言語で文字列を学ぶとき、日本語は見た目の1文字と内部のバイト数が一致しないことがあります。この点は、文字列、配列、ポインタ、文字コードを学ぶときに重要になります。

図:文字はコンピュータ内部で数値として扱われる

この図から分かること

この図から分かるのは、文字はコンピュータ内部では数値として扱われているという点です。

半角英字のAはASCIIコードで65、半角数字の1は49のように表現されます。一方、日本語の文字はUTF-8などの文字コードで複数バイトとして表されることがあります。C言語で文字や文字列を扱うときは、見た目の文字だけでなく、内部でどのように表現されているかも意識すると理解が深まります。

日本語文字列を表示するときの注意点

C言語で日本語の文字列を表示することはできます。ただし、ソースファイルの文字コード、コンパイラの設定、実行するコンソールの文字コードが関係するため、環境によって文字化けすることがあります。

Visual Studio 2026で日本語を扱う場合は、ソースファイルをUTF-8で保存する、コンソールが日本語を表示できる状態になっているか確認する、といった点を意識するとよいでしょう。

確認項目内容
ソースファイルの文字コード日本語が正しい文字コードで保存されているか
コンソールの表示設定日本語を正しく表示できる環境か
使用するフォント日本語を表示できるフォントか
文字と文字列の扱い日本語は文字列として扱うと分かりやすい
書式指定子日本語文字列の表示には%sを使う

入門段階では、日本語の1文字を%cで扱うより、日本語の文章を文字列として%sで表示する形から始めると理解しやすくなります。

小数の表示桁数に注意する

printf関数で%fを使って小数を表示すると、標準では小数点以下6桁まで表示されます。そのため、2.5を表示すると2.500000のようになります。

これはエラーではなく、printf関数の標準的な表示形式です。小数点以下の桁数を調整したい場合は、書式指定の中で桁数を指定できます。

書式表示の意味
%f小数点以下6桁で表示する
%.1f小数点以下1桁で表示する
%.2f小数点以下2桁で表示する
%.3f小数点以下3桁で表示する

たとえば、%.2fを使うと、小数点以下2桁で表示できます。計算結果や金額、割合などを見やすく表示したい場合に便利です。

書式指定子の数と引数の数を合わせる

printf関数では、書式指定子の数と、後ろに指定する値の数を合わせる必要があります。書式指定子が2つある場合は、対応する値も2つ必要です。

書式指定子の例必要な値
%s文字列が1つ必要
%d整数が1つ必要
%sと%d文字列と整数が1つずつ必要
%f、%d、%f小数、整数、小数が必要

また、順番も大切です。最初の書式指定子には最初の値、2番目の書式指定子には2番目の値が対応します。順番を間違えると、表示内容が崩れたり、正しくない結果になったりします。

よくあるミスと確認ポイント

printf関数と書式指定子を使うときは、いくつかの入力ミスに注意が必要です。特に、書式指定子と値の型が合っていない、引数の数が足りない、文字と文字列を混同する、といったミスが起こりやすいです。

よくあるミス確認するポイント
%dに小数を渡す小数には%fを使う
%cに文字列を渡す文字列には%sを使う
%sに1文字を渡す1文字には%cを使う
書式指定子より値が少ない書式指定子の数と引数の数を確認する
小数の桁数が多く見える%fは標準で小数点以下6桁表示される
日本語が文字化けする文字コードやコンソール設定を確認する

C言語では、printf関数の書式指定子を正しく使うことが、結果を確認する力につながります。表示がおかしいときは、プログラムの計算そのものではなく、表示方法の指定が間違っている場合もあります。

printf関数を学ぶとデバッグにも役立つ

printf関数は、学習用の表示だけでなく、プログラムの動作確認にも役立ちます。変数の値を途中で表示したり、処理がどこまで進んだかを確認したりすることで、プログラムの流れを理解しやすくなります。

C言語の学習では、エラーが出たときや思った結果にならないときに、printf関数を使って値を確認する場面があります。そのとき、%d、%f、%c、%sを正しく使い分けられると、原因を探しやすくなります。

確認したい内容使う書式指定子
整数の値%d
小数の値%f
1文字%c
文字列%s

printf関数は、C言語の基本でありながら、実践でもとても役立つ関数です。書式指定子を理解することで、出力結果を見やすく整え、プログラムの状態を正確に確認できるようになります。

書式指定子と文字コードを理解して出力に慣れる

printf関数を使いこなすには、書式指定子と値の型の対応を理解することが大切です。整数には%d、小数には%f、1文字には%c、文字列には%sを使います。この基本を押さえるだけでも、C言語の出力はかなり分かりやすくなります。

また、文字や文字列を扱うときには、文字コードの考え方も少しずつ意識していきましょう。半角英字や数字はASCIIコードで扱いやすい一方、日本語はUTF-8などで複数バイトとして表現されるため、環境によって表示に注意が必要です。

C言語の学習では、printf関数を使って多くの結果を確認します。書式指定子を正しく使えるようになると、変数の値、計算結果、文字列、文字コードに関する理解が深まり、プログラムの動きをより正確に追えるようになります。