
C言語のきほん|条件演算子
ifを1行にギュッ。条件演算子で、分岐をスマートに書けるようになろう。
条件演算子は「小さな分岐」を気持ちよく書く道具
C言語で分岐といえば if が定番ですが、毎回 if~else~ を書くほどでもない“ちょい分岐”ってけっこう出てきます。
たとえば、
- 大きい方の値を入れたい
- 条件で表示する文字だけ変えたい
- エラー表示か通常表示かを1行で切り替えたい
こういう場面で活躍するのが 条件演算子 です。
見た目はちょっとクセがあるけど、慣れると「これ、気持ちいいな…」ってなりますよ。
条件演算子の文法
条件演算子はこの形です。
条件式 ? 式1 : 式2
意味はシンプルで、
- 条件式が真なら式1
- 条件式が偽なら式2
が選ばれます。
まずは図でイメージ

ポイントはここです。
条件演算子は「文」じゃなくて「式」なので、評価結果(値)を持つんですね。だから代入の右側に置けます。
if~else~との対応(同じ意味になる)
たとえば次の条件演算子は、
max = (a >= b) ? a : b;次の if~else~ と同じ動きです。
- a >= b なら max に a
- そうでなければ max に b
ifで書くとこうなります。
if (a >= b) {
max = a;
} else {
max = b;
}対応表で見るとこんな感じ
| 書き方 | 目的 | 特徴 |
|---|---|---|
| if~else~ | 条件で処理を分ける | 複数行の処理に強い |
| 条件演算子 | 条件で値を選ぶ | 1行で書けてスッキリ |
条件演算子は「処理を分ける」というより 値を選ぶのが得意です。
使いどころのコツ:条件演算子が得意な場面
値を選んで代入するとき
- 大きい方
- 小さい方
- 文字列(表示メッセージ)を切り替え
- 0なら特別表示、そうでなければ通常表示
printfの一部だけ変えたいとき
- OK/NG を切り替える
- 記号を切り替える(○/×、+/- など)
- 改行するかスペースにするか
逆に、条件演算子が苦手な場面もあります。
| ちょっと苦手 | 理由 |
|---|---|
| 3段以上の複雑な分岐 | 読みにくくなりやすい |
| 式の中で重たい処理をする | 何をしてるか追いづらい |
| 式1と式2の型がバラバラ | 意図しない型変換が起きやすい |
サンプルプログラム
例:点数から合否メッセージを1行で作る
- 60点以上なら 合格です
- 60点未満なら もう少しです
条件演算子で、表示メッセージを切り替えます。
ファイル名:8_10_1.c
// 条件演算子で合否メッセージを切り替えるプログラム
#include <stdio.h>
int main(void)
{
int score;
printf("点数を入力してください(0~100)> ");
scanf("%d", &score);
// 60点以上なら「合格です」、それ以外は「もう少しです」
printf("%s\n", (score >= 60) ? "合格です。" : "もう少しです。");
return 0;
}実行イメージ
点数を入力してください(0~100)> 75
合格です。
点数を入力してください(0~100)> 40
もう少しです。この例の気持ちよさは、if~else~で3〜5行になる部分が、1行でスッと書けるところです。
例1:2つの値の大きい方を選ぶ(定番パターン)
文書にある例は超重要なので、考え方だけスッキリ整理します。
max = (a >= b) ? a : b;これを読むコツは、
- 条件 a >= b が真なら a
- 偽なら b
- その結果を max に代入
という順番で読むことです。
読み方テンプレ(慣れると速い)
(条件) ? 真のときの値 : 偽のときの値例2:一定間隔で改行する(printfと相性がいい)
文書の例は、10ごとに改行するテクニックでした。
ポイントはここです。
(i % 10) ? ' ' : '\n'- i % 10 が 0じゃない → 真 → ' '(スペース)
- i % 10 が 0 → 偽 → '\n'(改行)
ん?ってなりやすいのは、C言語では 0 が偽、0以外が真 というルールがあるからです。
真偽のルール(Cの基本)
| 値 | 判定 |
|---|---|
| 0 | 偽 |
| 0以外 | 真 |
だから、i % 10 が 0 のときだけ偽になって改行が選ばれる、という仕組みです。
条件演算子の注意点(つまずきやすいところ)
式1と式2は「どちらか一方だけ」評価される
条件演算子は、条件に応じて片方しか選ばれません。
- 条件が真なら式1だけ評価
- 条件が偽なら式2だけ評価
この性質は便利でもあり、注意点でもあります。
たとえば、式の中で副作用(代入や関数呼び出し)を混ぜると、挙動を読み間違えやすくなります。
ネスト(入れ子)しすぎると急に読みにくい
条件演算子を重ねると書けてしまいますが、初心者にはかなり読みにくくなりがちです。
| 書き方 | 読みやすさ |
|---|---|
| 単純な1段 | 読みやすい |
| 2段以上の入れ子 | 急にしんどい |
2段以上になるなら、素直にif~else if~else~で書いた方が、将来の自分にも優しいです。
表現をもう少し工夫する例:表示の一部だけ切り替える
条件演算子は、文字1個だけ切り替えるのも得意です。
たとえば偶数なら ○、奇数なら × を表示するとします。
- n % 2 が 0なら偶数
- そうでなければ奇数
printf("判定:%c\n", (n % 2 == 0) ? '○' : '×');こういう「表示の差分だけを変える」場面では、条件演算子はかなり強い味方です。
