3.8 条件演算子
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 を用いた場合はここまでスマートに記述することはできません。
#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; }
このプログラムは、ユーザーに 0 またはそれ以外の値を入力してもらい、その結果を評価します。入力された値が真、または偽によって printf() 関数が表示する文字が変化するというプログラムです。printf() 関数に注目してください。
iVariable ? "True" : "False" という式は、iVariable を評価してこれが真であれば "True" を、そうでなければ "Flase" を返すことを表しています。printf() 関数の第1引数では、文字列を受ける書式制御文字 %s を指定してこれを表示させています。