printf関数の基本
printf関数は、C言語で画面に文字や数値を表示するための最も基本的な関数です。
プログラムを作ると、「実行結果を画面に表示したい」「変数の値を確認したい」という場面に必ず遭遇します。
そんなときに使うのがprintf関数です。単純な文字の表示から、複雑な数値の整形まで、さまざまな出力に対応できる便利な関数です。
printf関数の役割と特徴
printf関数は、C言語の標準ライブラリに含まれる、画面出力のための関数です。
最大の特徴は、書式指定子という特別な記号を使うことで、整数や小数、文字列など、さまざまな種類のデータを思い通りの形で表示できることです。
例えば、単純に「ネコがないています」という文字を表示することもできますし、「変数の値は○○です」のように、プログラム実行中に変化する値を動的に表示することもできます。
まずは、基本的な使い方を見てみましょう。
出力結果
ネコがないています重要なポイントは次の3つです。
- #include <stdio.h>という行は、printf関数を使うために必要な宣言です
- 表示したい文字列は、必ずダブルクォーテーション""で囲みます
- 文の最後には、セミコロン;を付けます
この3点は押さえておきましょう。
基本的な書き方と改行の方法
printf関数の基本的な書き方は「printf("表示したい文字列");」です。
文字列は必ずダブルクォーテーション""で囲み、文の最後にセミコロン;を付けます。
改行したい場合は、文字列の中に\nを入れます。
この\nはエスケープシーケンスと呼ばれ、「改行する」という特別な意味を持つ文字です。通常の文字として表示されるのではなく、改行の命令として解釈されます。
実際に、改行を含む出力例を見てみましょう。
出力結果
イヌが走っています
ウサギが跳んでいます各printf文の最後に\nを付けることで、それぞれの文が別々の行に表示されます。
もし\nを付けずに複数のprintf文を書くと、どうなるでしょうか?
実際に\nを消して実行して確認してみてください。
printfにおける書式指定子の使い方
ここからは、C言語の最も重要な機能ともいえる書式指定子について学んでいきます。
書式指定子を使うと、変数の値を画面に表示できるようになります。例えば、「動物の数は○匹です」の○の部分に、プログラム実行中に変化する数値を表示できるのです。
書式指定子は%記号から始まる特別な文字列で、表示したいデータの種類(整数、小数、文字など)によって使い分けます。
数字や文字の出力(%d, %c, %s)
最もよく使う書式指定子は、以下の3つです。
- %d:整数(10進数の数値)を表示する
- %c:1文字だけを表示する
- %s:文字列(複数の文字)を表示する
実際の例を見てみましょう。
出力結果
ライオンは5頭います
最初の文字はTです
ゾウが森を歩いています書式指定子の使い方を押さえておきましょう。
- 文字列の中に書式指定子(%dなど)を書く
- その後ろに、カンマ,で区切って表示したい値や変数を書く
出力結果を見ると、次の処理がされていることを確認できると思います。
1行目:%dの位置に、数値の5が表示されます
2行目:%cの位置に、文字'T'が表示されます(文字は' 'シングルクォートで囲みます)
3行目:%sの位置に、文字列"ゾウ"が表示されます
小数点や浮動小数点数の出力(%f, %lf)
小数を含む数値を表示する場合は、%fまたは%lfという書式指定子を使います。
- %f:float型(単精度浮動小数点数)の値を表示する
- %lf:double型(倍精度浮動小数点数)の値を表示する
小数点以下の桁数を指定することもできます。
%.2fのように、%とfの間に.数字を入れることで、小数点以下の桁数を指定する形です。
- %.2f:小数点以下2桁まで表示
- %.1f:小数点以下1桁まで表示
実際の例を見てみましょう。
出力結果
パンダの体重は85.67 kgです
キリンの身長は5.2 mですどうしてこの出力結果になるのか確認しておきましょう。
- 1行目:%.2fにより、85.67がそのまま小数点以下2桁で表示されます
- 2行目:%.1lfにより、5.234が小数点以下1桁の5.2に丸められて表示されます
このように、表示する桁数を指定することができます。
2進数や16進数の出力(%b, %x, %X)
実務では、数値を10進数以外の形式で表示したいケースもあります。そんなときは次のように書きます。
- %x:16進数で表示(小文字のa-fを用いて表示する)
- %X:16進数で表示(大文字のA-Fを用いて表示する)
- %o:8進数で表示
また、標準のprintf関数では、2進数を表示する%bはサポートされていません。2進数表示が必要な場合は、自分で変換関数を作るといった、他の方法に頼る必要があります。
ちなみに、16進数はメモリアドレスの表示やカラーコードの表現などでよく使われるので、覚えておきましょう。
実際の例を見てみます。
出力結果
トラの数:10進数255
トラの数:16進数ff
トラの数:8進数377指定した形式で表示されていることが確認できますね。
ぜひ、他の数字でも試してみましょう。
printfでの桁数や空白の指定方法
printf関数では、表示する文字や数値の幅を指定して、きれいに整列させることができます。
例えば、複数の行にわたってデータを表示する際、数値の桁が揃っていないと見づらくなります。桁数指定や空白の活用により、表のように整った見やすい出力を実現できます。
この機能は、データを一覧表示したり、レポートを作成したりする際に非常に役立ちます。
桁数の指定と右寄せ・左寄せ
表示幅を指定するには、書式指定子の%と文字の間に数字を入れます。
具体的な書き方は、次のようなイメージです。
- %5d:5桁の幅で整数を表示(右寄せ)
- %-5d:5桁の幅で整数を表示(左寄せ)
- %10s:10文字分の幅で文字列を表示(右寄せ)
- %-10s:10文字分の幅で文字列を表示(左寄せ)
何も指定しないと右寄せになるため、左寄せにしたい場合は、%の後に-(マイナス記号)を付けましょう。
実際の例を見てみます。
出力結果
動物名: ヒツジ 数量: 12
動物名: ヤギ 数量: 8
動物名:ウマ 数量: 15このコードの動作を確認しましょう。
1行目と2行目は、%10sにより、動物名が10文字分の幅で右寄せ表示されます。
3行目は、%-10sにより、動物名が左寄せで表示されます。
数量は、%3dにより、3桁の幅で右寄せ表示されていることも確認できます。
0埋めによる数値の整列
数値の前を空白ではなく0(ゼロ)で埋めたい場合は、桁数の前に0を付けます。
書き方は次のような形です。
- %05d:5桁の幅で、足りない部分を0で埋める
この機能は、例えば次のような場面でよく使われます。
- 時刻表示(例:09:05)
- 連番の生成(例:001, 002, 003...)
- ファイル名の統一(例:image_001.jpg, image_002.jpg)
これだけを見ても有用な機能だということが想像できるかと思います。
ちなみに、0埋めは数値にのみ使えます。文字列では使えません。
実際の例を見てみましょう。
出力結果
動物ID:0007 - サル
動物ID:0123 - クマ
動物ID:0045 - オオカミすべてのIDが同じ桁数で揃うため、非常に見やすくなっています。
空白やタブを使った整形
出力結果を見やすく整えるためには、空白やタブ文字を適切に使うことも重要です。
- \n:改行
- \t:タブ(一定の間隔で文字を配置)
タブ文字\tを使うと、一定の間隔で項目を配置できるため、表のようなレイアウトを簡単に作れます。
実際の例を見てみましょう。
出力結果
動物 体重 生息地
ペンギン 3.5kg 南極
アザラシ 85.0kg 北極海
シロクマ 350kg 北極1行目がヘッダー(見出し)、2行目以降がデータになっています。必要に応じて\tを複数使うことで、項目間の間隔を調整できます
ちなみに、タブの幅は環境によって異なる場合があります。より正確な位置調整が必要な場合は、桁数指定を使う方が確実です。
printfと変数の活用例
ここまでは、数値や文字列を直接printf関数に書いてきました。
しかし、実際のプログラミングでは、変数に格納された値を表示することがほとんどです。
変数を使うと、プログラム実行中に変化する値や、ユーザーが入力した値などを動的に表示できます。
ここでは、さまざまな型の変数をprintf関数で表示する方法を学んでいきましょう。
整数変数の出力
整数型(int型)の変数を表示する場合は、%dという書式指定子を使います。
変数に格納された数値を画面に表示する、最も基本的な方法です。
計算結果やカウンタの値、ユーザーが入力した数値などを表示する際によく使います。
実際の例を見てみましょう。
出力結果
ネコは7匹います
イヌは12匹、ネコは7匹です書式指定子の使い方は、こうでしたね。
- 文字列の中に書式指定子(%dなど)を書く
- その後ろに、カンマ,で区切って表示したい値や変数を書く
違うのは、直接数値を指定していた箇所に変数を書くという点です。
ちなみに、複数の変数を表示する場合は、 書式指定子の順番と変数の順番が一致するように注意しましょう。順番を間違えると、意図しない値が表示されてしまいます。
試しに、2行目の出力でcat_countと、dog_countの記述を入れ替えてみると、それが確認できるはずです。
小数点付き変数の出力
変数でも、小数を含む数値(浮動小数点数)を表示する場合は、%fまたは%lfを使います。
- float型の変数:%fを使う
- double型の変数:%lfを使う
実際の例を見てみましょう。
出力結果
ウサギの体重は2.75kgです
トリの身長は15.2cmですもし、この出力結果にピンとこない場合は、この記事を読み返して復習しましょう。
文字列変数の出力
変数でも、文字列を表示する場合は、%sという書式指定子を使います。
C言語では、文字列はchar型の配列として扱います。動物の名前やメッセージなど、テキスト情報を動的に表示したい場合に有用です。
ちなみに、桁数を指定して表示幅を揃えることもできるので、覚えておきましょう。
実際の例を見てみましょう。
出力結果
キツネが森を駆け抜けています
キツネとタヌキが一緒にいます%sの位置に、それぞれの変数に格納された文字列が表示されているのが確認できますね。
ちなみに、char animal1[] = "キツネ";は、「キツネ」という文字列を格納するchar型配列です。
また、char animal1[]の[]は、配列のサイズを自動的に決定するという意味です。文字列の長さに応じて、必要なサイズが自動的に確保されます。
printfと関連する便利な関数
printf関数には、似た機能を持つ関連関数がいくつかあります。
こういった関数を使いこなせると、「画面ではなく文字列に出力したい」「ファイルに保存したい」といった、さまざまな場面に対応できるようになります。
ここでは、実際の開発でよく使われる関連関数について解説していきます。
ここからは少し応用的な内容になるので、初心者の方は「こういうこともできるんだな」というくらいの認識でも構いません。
まずは、基本的な内容からマスターすることに努めましょう。
sprintfによる文字列への出力
sprintf関数は、printf関数と同じ書式指定を使いながら、出力先を画面ではなく文字列にできる関数です。
基本的な書き方は次の通りです。
sprintf(出力先の文字配列, "書式指定を含む文字列", 値...);
有用なケースとして、次のような場面が挙げられます。
- ファイル名を動的に生成する(例:data_001.txt, data_002.txt)
- 数値を文字列に変換する
- メッセージを組み立ててから後で使う
printf関数との違いは、第一引数に「出力先の文字配列」を指定する点です。
実際の例を見てみましょう。
出力結果
シカが8頭、野原にいます
ファイル名:animal_042.txtこのコード例の処理を確認しておきましょう。
messageという配列に、「シカが8頭、野原にいます」という文字列が作られます。
filenameという配列に、「animal_042.txt」という文字列が作られます。
その後、printf関数で画面に表示しているという形です。
fprintfによるファイルへの出力
fprintf関数は、printf関数と同じ書式指定を使いながら、指定したファイルに出力できる関数です。
書き方は次の通りです。
fprintf(ファイルポインタ, "書式指定を含む文字列", 値...);
特に有用なのは、例えば次のような場面です。
- プログラムの実行結果をファイルに保存する
- ログファイルを作成する
- データを記録して後で分析する
printf関数との違いは、第一引数に「ファイルポインタ」を指定する点です。
実際の例を見てみましょう。
出力結果
ファイルに動物データを保存しましたこのコード例のポイントとなる動作を確認します。
- messagefopen("zoo_data.txt", "w")で、書き込み用のファイルを開きます
- fprintfで、ファイルに文字列や数値を書き込みます
- fclose(file)で、ファイルを閉じます
重要なポイントは、次の通りです。
- ファイルを開いた後は、必ずfcloseで閉じる
- fopenが失敗した場合(ファイルが開けなかった場合)に備えて、if (file != NULL)でチェックする
- "w"は「書き込みモード」を意味する。既存のファイルがあると上書きされるので注意が必要
初心者の方は、「ファイルに出力できるんだ」ということだけでも押さえておきましょう。
putsやputcharとの違い
printf関数以外にも、画面に出力するための関数がいくつかあります。主な出力関数をまとめたので、ここで各関数の特徴を確認しておきましょう。
主な出力関数
- puts関数:文字列を表示し、自動的に改行を追加する
- putchar関数:1文字だけを表示する
- printf関数:書式指定を使った柔軟な出力ができる
それぞれの特徴を理解して、使い分けることが大切です。
実際に、各関数の違いを比較してみましょう。
出力結果
printf: ハムスター 4匹
puts: ハムスターが走っています
H使い分けする考え方としては、次のような基準を持っておくと良いでしょう。
- 変数の値を表示したい → printf
- 単純な文字列を表示したい → puts(putsの方が軽量で高速)
- 1文字だけ表示したい → putchar
ちなみに、 puts関数は自動的に改行されるため、\nを付ける必要がありません。逆に、改行したくない場合はprintfを使う必要があります。
よくある質問(Q&A)
Q: %dと%fを間違えて使うとどうなりますか?
A: データ型と書式指定子が合わない場合、予期しない値が表示されるか、プログラムがエラーで止まる可能性があります。
整数にはintに%d、小数にはfloat/doubleに%f/%lfを正確に対応させることが重要です。
Q: 書式指定子の順番を間違えたら?
A: 順番が違うと意図しない値が表示されたり、プログラムが異常終了する場合があります。printf関数では書式指定子の順番と引数の順番を一致させるようにしましょう。
記述時は必ず対応関係を確認してください。
Q: 文字列に%を表示したいときはどうする?
A: %記号そのものを表示したい場合は%%と2つ続けて記述します。これにより書式指定子として解釈されず、%文字が画面に出力されます。
Q: printfで長い文字列を複数行に分けたい
A: C言語では隣接する文字列リテラルは自動的に結合されます。
改行したい位置で\nを使用することで、見やすい形で長い文字列を扱えます。コードの可読性上げたい場合には使うようにしましょう。
Q: 変数を使わずに計算結果を直接表示できる?
A: printf関数の引数部分で直接計算式を記述できます。
printf("結果: %d\n", 5 + 3);のように書くことで、計算結果の8が表示されます。簡単な計算なら変数を使わずに済みます。
まとめ
C言語のprintf関数は、プログラミングにおいて最も基本的で重要な関数の1つです。
この記事では、printf関数の基本的な使い方から、その関連関数といった応用的な内容まで解説してきました。
printf関数が活用できる場面は、次のようなケースです。
printf関数が活躍する場面
- 実行結果を画面に表示したいとき
- 変数の値を確認したいとき
- 小数点以下の桁数を指定して出力したいとき
- 数値の表現形式を変更して出力したいとき
- 関連関数を使って画面とは別の場所に出力したいとき
最後に、重要なポイントをおさらいしましょう。
重要なポイント
- printf関数は、画面に文字を表示できる
- %d(整数)、%f(小数)、%s(文字列)といった書式指定子で変数の値を表示できる
- 桁数指定や0埋めといった形式で表示できる
- 変数との組み合わせで、値を動的に表示できる
- 関連関数(sprintf, fprintf)による応用的な活用ができる
printf関数は、デバッグでも非常に有用です。
変数の値を確認したいとき、プログラムのどこまで実行されたかを知りたいときなど、printf関数で表示することで問題を発見しやすくなります。
プログラミングに長く触れているうちに、printf関数の有用性に気付いていくことでしょう。
プログラミングをもっと体系的に学びたい方には、paizaラーニングがおすすめです。Webブラウザがあればすぐに始められ、実際にコードを書きながら学習できるため、printf関数をはじめとするC言語の基礎を着実に身に付けることができます。