if-else文

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が'*'だった場合、

  1. if (op == '+')にあてはまらないので、elseに行く
  2. elseの中のif (op == '-')にもあてはまらないので、そのあとのelseに行く
  3. そのelseの中のif (op == '*')にあてはまるので、result = a * b;を実行する

という流れである・・・。
よって、

$ ./if_else
a: 5
op('+', '-', '*', '/'): *
b: 2
result = 10

こんな処理が可能なのである・・・。

Sample/if_else.c at master · bg1bgst333/Sample · GitHub