比較演算子による条件設定
ifの条件式で変数の値を調べるには、2つの値を比較する比較演算子を用います。比較演算子による演算の結果は、正しいか正しくないかの2つに分かれます。
0以上かどうかを調べる
ここで作るプログラムでは、先に述べたように「ifの書式(2)」を使います。
条件式では
変数の値が0~9の整数かどうか
を調べなければなりませんが、ここではまず『0より大きいかどうか』だけを調べることにします。値の状態を調べるには、表1のような比較演算子を用います。これらは
x >= 100
のような形で用います。記号の左側の値を左辺(左辺値、左辺式)、右側の値を右辺(右辺値、右辺式)と呼び、左辺と右辺を比較した結果が正しければ(式が成立すれば)0以外の値を、正しくなければ(式が成立しなければ)0を返します。
比較演算子は右辺と左辺を比べてその結果を返しますが、このようにある式の結果を求めることを「(式を)評価する」と言います。
表1:比較演算子の種類と機能
演算子 |
機能 |
== |
左辺と右辺が等しい |
> |
左辺が右辺より大きい |
< |
左辺が右辺より小さい(未満) |
>= |
左辺が右辺より大きいか等しい(以上) |
<= |
左辺が右辺より小さいか等しい(以下) |
!= |
左辺と右辺が等しくない |
Cの論理値はint型
前回(第4回)で紹介した代入演算子は、演算子による演算の結果、様々な値を返しました。ここで紹介している比較演算子は、演算子の左辺と右辺を比較して正しければ0以外、正しくなければ0という2つの値のどちらかを返します。
条件式の結果が正しい場合を「真」、正しくない場合を「偽」と呼びます。真と偽の2種類しかないデータの形式を論理値と呼び、Visual BasicではTrue(真)とFalse(偽)の2つの値を持つBoolean型を使いますが、Cにはそのような便利な型はありません。そこで、Cではヘッダファイルに以下のような定義を記述して、論理型をint型で代用します。
#define BOOL int ---- BOOL型を定義(実体はint型)
#define FALSE 0 ----- FALSE(偽)は0
#define TRUE !0 ----- TRUE(真)は0以外
!は否定を意味する演算子で、“!0”は「0以外の値」を示します。
プログラムを作る
では、ソースコードを書き直して「ユーザーが0~9以外の値を入力したらメッセージを表示する」プログラムを作ってみましょう。リスト2のようになります。
if (num >= 0)
の箇所で変数numの値が0以上かを調べ、それが真のときには続く{ }内の計算結果を表示する処理が実行されます。
そして、そうではない(numが0未満の)場合にはelseに続く{ }内の処理が実行され、メッセージが表示されます。
ifによる条件の判定では
if (num >= 0)
と記述されています。先述したように、比較演算子(ここでは>=)を使った式は、その評価を0(偽)または0以外(真)の値で返します。つまり上の式を厳密に書くと
if ((num >= 0) != 0)
となり、『式“num >= 0”の評価が真(!= 0)であるかどうか?』を調べていることになります。もちろん、このような冗長な記述をする必要はありません。ifはそれに続く( )内の式を評価し、真だったときに続く処理を実行する構造となっているからです。
リスト2:入力された値が0以上でなければメッセージを表示するプログラム(標準的なCのソース)
#include <stdio.h>
int main(void)
{
int num;
printf("Input number : ");
scanf("%d", &num);
if (num >= 0) { ------------ numの値が0以上のとき以下を実行
printf("%d * 10 = %d\n", num, num * 10);
return (0);
} else { ------------------- そうでない場合には以下を実行
printf("0~9までの数字を入力してください。\n");
return (-1);
}
}
returnと終了コード
リスト2では、returnによる処理の終了が2箇所記述されています。1つ目はnumが0以上だったとき、計算結果を表示した後に
return (0);
と記述され、2つ目はelse以降の{ }内でメッセージを表示した後に
return (-1);
と記述されています。
returnは関数ではなく、関数を抜け出すための命令語──キーワードです。main関数から抜け出すということは、プログラムの終了を意味します。このときreturnに続く( )内に記述した値が、このプログラムを呼び出した上位のプログラム(一般にはシェル・プログラム)に『終了コード』として返されます。
一般的には、プログラムが正常終了した(目的通りの処理を終えた)場合には0、エラーなどで目的の処理が達せられなかった場合には-1を返します。main関数はint型の値を返すように宣言されていますが、終了コードは1バイトの値としてシェルに処理されるため-1は16進数で\xFFとなり、符号なし10進数では255になります。
もちろん、終了コードは0と-1以外の値を返しても構いません。それによって、プログラム終了時の状態を上位であるシェル・プログラムに知らせることができます。
|
|
|