
C言語のきほん|printfで文字と文字列を出力する
文字・文字列・%記号まで、printfで思いどおりに表示しよう。表示の基本をここでしっかり固めよう。
C言語の学習を進めていくと、数値だけでなく、文字や文字列を表示したくなる場面がどんどん増えてきます。
たとえば、メニュー表示、エラーメッセージ、入力案内、結果の説明文など、実際のプログラムでは文字の表示はとても大事です。
ここで活躍するのが printf 関数です。
printf は整数や小数だけでなく、1文字 や 文字列 も表示できます。さらに、少し紛らわしい % 記号そのものを表示する方法もあります。
このあたりをしっかり理解すると、画面表示がかなり自由に作れるようになります。
特に、文字は %c、文字列は %s、%記号は %% というルールは、printf を使ううえでの基本セットです。
ここでは、文字と文字列の表示の違いをやさしく整理しながら、サンプルプログラムと一緒に丁寧に解説していきます。
あわせて、よく出てくる変換指定子の名前の由来も、覚えやすい形でまとめていきます。
文字と文字列はどう違うのか
まず最初に、ここを整理しておくと理解しやすくなります。
C言語では、文字と文字列は似ているようで別物です。
- 文字:1文字だけ
- 文字列:0文字以上の文字の並び
書き方も違います。
- 文字はシングルクォーテーションで囲む
例:A、Z、! - 文字列はダブルクォーテーションで囲む
例:Hello、C言語、空文字列
コードで見るとこんな違いです。
'A' /* 文字 */
"ABC" /* 文字列 */
この違いは printf で表示するときの書式指定にも関係してきます。
コンピュータの中では文字も数値として扱われる
少しだけ仕組みの話をすると、コンピュータの内部では文字も文字コードという数値で扱われています。
つまり、見た目は文字でも、内部では整数値として管理されているイメージです。
そのため、printf では「この値を文字として表示したい」「文字列として表示したい」と指定してあげる必要があります。
その指定に使うのが変換指定です。
文字・文字列・%記号で使う書式指定
今回のテーマで使うのはこの3つです。
| 書式指定 | 意味 | 使いどころ |
|---|---|---|
| %c | 文字 | 1文字を表示したいとき |
| %s | 文字列 | 文字列を表示したいとき |
| %% | %記号 | % をそのまま表示したいとき |
ここはセットで覚えるのがおすすめです。
- %c は character
- %s は string
- %% は % 自体を表示する特別ルール
%c で文字を表示する
%c は 1文字を表示するときに使います。
文字定数を渡して表示するのが基本です。
例:
printf("文字: %c\n", 'A');実行結果
文字: A複数の文字も並べて表示できます。
printf("%c %c %c\n", 'A', 'B', 'C');このとき、書式指定の数と、後ろに渡す値の数をそろえるのがポイントです。
%s で文字列を表示する
%s は文字列を表示するときに使います。
文字列リテラルをそのまま渡すこともできますし、あとで学ぶ文字配列の内容を表示するときにも使います。
例:
printf("文字列: %s\n", "Hello");実行結果
文字列: Hello複数の文字列も表示できます。
printf("%s %s\n", "hello", "world");実行結果
hello world%% で %記号を表示する
ここは printf の中で特に大事なポイントです。
% は書式指定の開始記号なので、そのまま書くと「変換指定のつもりかな?」と解釈されます。
そのため、% 記号そのものを表示したいときは %% と書きます。
例:
printf("達成率: 80%%\n");実行結果
達成率: 80%この %% は実務でもよく使います。
割合やパーセント表示を出すときに必須です。
サンプルプログラムで確認しよう
ファイル名:5_5_1.c
#include <stdio.h>
int main(void)
{
/* 文字を3つ表示する */
printf("記号: %c %c %c\n", 'X', 'Y', 'Z');
/* 文字列を2つ表示する */
printf("あいさつ: %s %s\n", "おはよう", "ございます");
/* パーセント記号を表示する */
printf("進捗率: 75%%\n");
return 0;
}実行結果例
記号: X Y Z
あいさつ: おはよう ございます
進捗率: 75%サンプルプログラムの解説
%c は1文字ずつ対応する
printf("記号: %c %c %c\n", 'X', 'Y', 'Z');この行では、書式文字列の中に %c が3つあります。
そのため、後ろの値も3つ渡しています。
対応は左から順番です。

この順番対応は printf 全体の基本ルールです。
%s は文字列をそのまま表示できる
printf("あいさつ: %s %s\n", "おはよう", "ございます");%s を使うと、文字列リテラルをそのまま表示できます。
日本語のメッセージを作るときにもよく使います。
なお、文字列の中に空白を入れたい場合は、書式文字列側に空白を書くのが簡単です。
この例では %s と %s の間に空白を入れているので、表示も自然な形になります。
%% で % を1つ表示する
printf("進捗率: 75%%\n");%% と2つ書いて、実際には % が1つ表示されます。
ここは最初にかなり間違えやすいポイントなので、早めに慣れておくのがおすすめです。
文字と文字列の違いを表で整理
混ざりやすいので、ここで一度整理しておきましょう。
| 項目 | 文字 | 文字列 |
|---|---|---|
| 意味 | 1文字 | 複数文字の並び |
| 書き方 | 'A' | "ABC" |
| printfの書式指定 | %c | %s |
| 例 | 'X' | "こんにちは" |
ここを区別できるようになると、printf のミスがかなり減ります。
よくあるミスと注意点
%c と %s を混同する
よくあるのがこれです。
- 文字なのに %s を使う
- 文字列なのに %c を使う
たとえば 'A' は文字なので %c、"A" は文字列なので %s です。
見た目は似ていますが、シングルクォーテーションかダブルクォーテーションかで意味が変わります。
% を1つだけ書いてしまう
次のような書き方はミスのもとです。
printf("進捗率: 75%\n");この % は書式指定の開始記号として解釈される可能性があるので、%記号を表示したいときは %% を使います。
printf("進捗率: 75%%\n");書式指定の数と値の数が合っていない
たとえば %c が3つあるのに、値を2つしか渡していないと正しく動きません。
良い例
printf("%c %c\n", 'A', 'B');注意が必要な例
printf("%c %c\n", 'A');printf では、書式指定と値の数をそろえるのが基本です。
変換指定子の名前も一緒に覚えると便利
ご提示のとおり、変換指定子は英語の頭文字をもとにしたものが多いです。
意味とセットで覚えると忘れにくくなります。
| 変換指定子 | 英語 | 意味 |
|---|---|---|
| c | Character | 文字 |
| d | Decimal | 10進数 |
| x | heXadecimal | 16進数 |
| o | Octal | 8進数 |
| f | Floating point | 浮動小数点数 |
| e | Exponent | 指数表記 |
| s | String | 文字列 |
特に今回のテーマでは、c と s をしっかり押さえるのが大切です。
すでに学んだ d、o、x、f、e と一緒に並べて覚えると、printf の全体像が見えてきます。
printfで文字と文字列を扱えるようになるとできることが増える
文字と文字列の表示ができるようになると、プログラムの表現力が一気に上がります。
たとえば、こんな表示が作れるようになります。
- メニュー画面の表示
- 案内メッセージ
- 結果のラベル付き表示
- 記号を使った見やすい画面表示
数値だけの表示より、文字列を組み合わせた表示のほうが、ユーザーにも自分にもわかりやすいプログラムになります。
printf の %c、%s、%% は、そのためのとても基本的で大切な道具です。
表示の組み合わせ例を見てみよう
最後に、文字・文字列・数値・%記号を組み合わせるとどうなるか、イメージしやすい例を載せておきます。
例:
ファイル名:5_5_2.c
#include <stdio.h>
int main(void)
{
char grade = 'A';
int score = 92;
printf("判定: %c\n", grade);
printf("メッセージ: %s\n", "よくできました");
printf("達成率: %d%%\n", score);
return 0;
}このように、今まで学んだ書式指定を組み合わせることで、かなり実用的な表示が作れるようになります。
printf は覚えることが少しずつ増えますが、1つずつ使っていけば自然と慣れていけます。
