if文は、条件によって処理を分岐させたい時に使う構文・・・。
たとえば、
aが10なら、"a is 10"とprintfで出力
したいときは、
if (a == 10) printf("a is 10\n");
と書く・・・。
ifのあとの括弧"()"に条件式、そのあとに実行したい処理を書く・・・。
"=="は同値の比較演算子で、両辺の値が等しいとき真(0でない値)を返す・・・。
条件式が真なら、そのあとの文(ここではprintf)が実行されるという仕組み・・・。
ここでは、入力されたa, bを使った簡単な電卓をつくり、エラー処理や演算の決定にif文を使う・・・。
まず、aの値を入力・・・。
次にどの演算にするか、演算子記号を入力・・・。
"&&"で条件をつなげているが、このif文
if (op != '+' && op != '-' && op != '*' && op != '/')
の意味は、
opが'+', '-', '*', '/'のどれでもない場合は、次のエラー処理を実行する
ことを表している・・・。
この条件にあてはまった時、
{ /* opが'+', '-', '*', '/'のどれでもない場合は, エラー終了. */ printf("Error: op( = %c) is invalid.\n", op); /* "op is invalid."というエラーメッセージを出力. */ return -1; /* プログラムの異常終了 */ }
エラーメッセージを出力して、システムに-1を返して終了する・・・。
a: 20 op('+', '-', '*', '/'): A Error: op( = A) is invalid.
あてはまらない場合は、次の処理へ・・・。
bの入力・・・。
0で除算するような演算になってしまう場合は、エラーメッセージを出力して、システムに-2を返して終了する・・・。
a: 5 op('+', '-', '*', '/'): / b: 0 Error: Division by zero.
次にいよいよaとbの演算・・・。
入力されたopに従って、使う演算子を切り替える・・・。
ここでelseの登場・・・。
elseはifの条件にあてはまらないときに実行される・・・。
ここでは、elseの後にさらにif文で条件を指定することで3つ以上の分岐ができるようになっている・・・。
たとえば、opが'*'だった場合、
- if (op == '+')にあてはまらないので、elseに行く
- elseの中のif (op == '-')にもあてはまらないので、そのあとのelseに行く
- そのelseの中のif (op == '*')にあてはまるので、result = a * b;を実行する
という流れである・・・。
よって、
$ ./if_else a: 5 op('+', '-', '*', '/'): * b: 2 result = 10
こんな処理が可能なのである・・・。