WisdomSoft - for your serial experiences.

3.8 条件演算子

条件の結果に応じて評価する式を選択する条件演算子について説明します。if 文による制御と違い、条件演算子は条件に応じてどの式を評価するかを選択できます。

3.8.1 3項演算子

C 言語の演算子のほとんどは 1 つのオペランドを受ける単項演算子か、2 つのオペランドを受ける2項演算子ですが、3 つのオペランドを受け 3 項演算子がひとつだけ存在しています。それが条件演算子 "?:" です。

条件演算子は if 文と極めて似た動作をひとつの式として実現させることができます。そのため、小規模な分岐処理に適しています。例えば、ある値 n が 0 以外であれば変数 z に x を代入し、そうでなければ z に y を代入するというような式内での分岐に最適です。条件演算子は次のように記述します。

条件演算子
条件式 ? 式1 : 式2

条件式には評価する式を指定します。ここで指定した条件式が真であれば 式1 が評価され、この演算子の結果はその値となり、そうでなければ 式2 が評価されその値が結果として返されます。変数 z に代入する値を条件によって分岐させたい場合は次のようになるでしょう。

z = n ? x : y;

この式では、n が真であれば z に x を代入し、そうでなければ z に y を代入するということを表しています。これを if 文を使って書くこともできますが、if-else を用いた場合はここまでスマートに記述することはできません。

コード1
#include <stdio.h>

int main() {
	int iVariable;
	printf("Please input a number 0 or some else>");
	scanf("%d" , &iVariable);
	printf("An input value is %s.\n" , iVariable ? "True" : "False");
	return 0;
}
実行結果
コード1 実行結果

このプログラムは、ユーザーに 0 またはそれ以外の値を入力してもらい、その結果を評価します。入力された値が真、または偽によって printf() 関数が表示する文字が変化するというプログラムです。printf() 関数に注目してください。

iVariable ? "True" : "False" という式は、iVariable を評価してこれが真であれば "True" を、そうでなければ "Flase" を返すことを表しています。printf() 関数の第1引数では、文字列を受ける書式制御文字 %s を指定してこれを表示させています。