
C言語基礎|putchar関数
はじめに:putcharは「1文字だけ出したい!」を最短で叶える相棒
C言語で画面に何かを表示するとき、まず思い浮かぶのは printf かもしれません。
でも実際のプログラムでは、
- 記号をずらっと並べたい。
- 1文字ずつ整形しながら出したい。
- 改行やタブなどの制御文字を確実に出したい。
みたいに、「1文字だけ」を何度も出したい場面がけっこうあります。
そんなときに気持ちよく使えるのが putchar関数 です。

サンプル:入力した回数だけ「!」を並べ、最後に改行する
「入力した回数だけ ! を並べて表示する」プログラムを例に解説をします。
プロジェクト名:chap4-9-1 ソースファイル名:chap4-9-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 読み込んだ整数の個数だけ ! を連続表示
#include <stdio.h>
int main(void)
{
int n;
printf("いくつ表示しますか:");
scanf("%d", &n);
while (n-- > 0)
putchar('!'); // 1文字ずつ出力
putchar('\n'); // 最後に改行
return 0;
}実行例
いくつ表示しますか:6
!!!!!!
いくつ表示しますか:0
いくつ表示しますか:-20 や負の数を入力すると、while文のループ本体が1回も実行されないので、結果的に改行だけが出ます。
putchar関数の役割と書式
putchar は 1文字を標準出力(通常は画面)に出力する関数です。
putcharの基本
| 項目 | 内容 |
|---|---|
| 役割 | 1文字を標準出力へ出す |
| 書式 | putchar(文字); |
| 必要なヘッダ | stdio.h |
| 戻り値 | 成功時:出力した文字(int)/失敗時:EOF |
使い方はシンプルで、かっこの中に「出したい文字」を渡します。
putchar('A'); // A を1文字表示
putchar('\n'); // 改行を1文字表示文字を渡すときの注意:putcharに渡すのは文字定数
putchar に渡すのは 1文字です。
つまり、シングルクォートで囲んだ 文字定数 を渡します。
正しい例と誤り例
| コード | 結果 | 理由 |
|---|---|---|
| putchar('A'); | 正しい | 1文字(文字定数) |
| putchar("A"); | 誤り | 文字列(複数文字の並び) |
| printf("A"); | 正しい | printf は文字列を扱う |
| printf('A'); | 誤り | printf は文字列が必要 |
この違いはめちゃくちゃ大事です。
見た目は似ているけど、'A' と "A" は別物です。
文字定数と文字列リテラルの違い
'A' と "A" のイメージ
'A' -> a single character (character constant)
"A" -> a string (string literal) that contains characters
表:'a' と "a" の違い
| 書き方 | 呼び名 | 中身 | 代表的な用途 |
|---|---|---|---|
| 'a' | 文字定数 | 1文字 | putchar、1文字比較 |
| "a" | 文字列リテラル | 文字の並び | printf、puts |
サンプルの流れ:whileで回数分だけ1文字を積み上げる
今回のサンプルは、次の2段構えです。
- while文で ! を n 回出す。
- 最後に改行 \n を1回出す。
プログラムの流れ
n を入力
↓
n が 0 より大きい間は繰り返す
├ putchar('!') を実行
└ n を 1 減らす
↓
putchar('\n') で改行
↓
終了n が 3 のときの変化(n-- > 0)
| 判定回 | 判定に使う n | n > 0 ? | ループ本体 | 判定直後の n |
|---|---|---|---|---|
| 1 | 3 | 真 | ! を出す | 2 |
| 2 | 2 | 真 | ! を出す | 1 |
| 3 | 1 | 真 | ! を出す | 0 |
| 4 | 0 | 偽 | 実行しない | -1 |
「表示は3回」で、終了時の n は -1 になっている点がポイントです。
do文とwhile文:ループ本体が1回も実行されないことがある
サンプルでは 0 や負の値を入力すると、ループ本体が素通りされます。
これは while文が前判定だからです。
do文とwhile文の違い
| 種類 | 判定のタイミング | ループ本体 |
|---|---|---|
| do文 | 後で判定(後判定繰返し) | 少なくとも1回は実行される。 |
| while文 | 先に判定(前判定繰返し) | 1回も実行されないことがある。 |
つまり、
- 必ず1回は処理したい → do文が向きやすい。
- 条件を満たすときだけ処理したい → while文が向きやすい。
という使い分けになります。
まとめ:putcharを使えると出力の自由度が上がる
- putchar は 1文字だけ出力する関数
- putchar に渡すのは文字定数('A' の形)
- "A" は文字列なので putchar には渡せない。
- while文と組み合わせると「記号を回数分並べる」がきれいに書ける。
- while文は前判定なので、条件によってはループ本体が1回も実行されない。
