今まで作ってきたプログラムは、すべて
一方通行のプログラムでした。
つまり、始めから終わりまで、書かれている順番通りに文を実行し、
文がなくなれば終わりになると言う、もっとも単純な仕組みでした。
本当に単純なプログラムであればこれでも何とかなるのですが、
少しでも複雑な処理をさせようとすると、すぐに行き詰まります。
この問題を解決するには、条件によって、処理の内容を変えるようにします。
お金に余裕がある ならば 焼肉定食
お金に余裕がない ならば 素うどん
のような、条件による判断が必要になってきます。
コンピュータの世界では、条件と言えば、数値の値に他ありません。
さらに具体的に言えば、2つの数値の比較こそが条件となりえます。
C言語には、条件による判断を行う文として、
if(イフ)文が用意されています。
if文は、2つの数値の値を比較して、その結果を元に処理分けを行います。
if文の使い方は、次の通りになります。
if文による数値の比較は、非常に明快で単純です。
すなわち、指定された数値が、0 であるかそうでないかを判定するだけです。
C言語では、条件による判定を行う場合、
0を偽の値、0以外を真の値、と呼んでいます。
【真の値】
条件判断の呼び方で、0以外の数値(負の数ですら)を意味する。
true と表記することもある。
【偽の値】
条件判断の呼び方で、0を意味する。
false と表記することもある。
if文では、指定された数値が
真である(数値が0以外の)場合だけ横の文を実行します。
そうでない場合は、文は飛ばされて、if文の後の文を実行します。
次のプログラムは、数値が真(数値が0以外の)の時だけ、数値を表示します。
#include <stdio.h>
int main(void)
{
int suuti = 10;
if (suuti)
printf("%d\n", suuti);
return 0;
}
このプログラムの実行結果は、次の通りになります。
このプログラムでは、int suuti=10; としていますが、
これは、宣言と同時に代入を行う場合の書き方です。
この書き方は、変数の値を最初に決められるため、
初期化と呼ぶことがあります。
【初期化】
変数の宣言と同時に数値を代入すること。
このプログラムでは、suuti の値を 0 にすると何も表示されませんが、
それ以外の値にした時は、その値が表示されます。
前節を読んだだけでは、if文はかなり使い道のない文に見えるかもしれません。
なにしろ、0 かそうでないかの判定しか出来ないのですから。
しかし、普通の計算とif文を組み合わせれば、もっと高度な比較が可能です。
たとえば、値が同じ数同士を減算すると、答えは当然 0 になります。
この性質を利用すれば、引き算によって、値の判定が可能になります。
次のプログラムは、その性質を利用し、入力された数が 10 であるかを判定します。
#include <stdio.h>
int main(void)
{
int suuti;
scanf("%d", &suuti);
if (suuti - 10)
printf("入力値は 10 ではありません。\n");
return 0;
}
このプログラムを実行させて 10 を入力した場合の結果は、次の通りになります。
このプログラムを実行させて 10 以外を入力した場合の結果は、次の通りになります。
135 入力したデータ
入力値は 10 ではありません。
この方法をさらに複雑に応用すれば、非常に高度な比較も可能になります。
しかし、変数の値が 10 かどうかを調べるのに、減算しなければならないと言うのは面倒です。
そこで、C言語には、
比較専用の演算子が用意されています。
2つの数値が等しいかどうかを調べる場合には、
==演算子を使用します。
この演算子は、2つの値が等しい時には結果が真になるという計算を行います。
プロでも = と == をうっかり間違えてしまうことが良くあります。
= は 左の変数への代入、== は右と左の数値が等しいかの比較です。
思うように動かない時には、まずはここを疑ってみてください。
次のプログラムは、==演算子で入力された値が 10 かどうかを調べる例です。
#include <stdio.h>
int main(void)
{
int suuti;
scanf("%d", &suuti);
if (suuti == 10)
printf("入力値は 10 です。\n");
return 0;
}
このプログラムを実行させて 10 を入力した場合の結果は、次の通りになります。
このプログラムを実行させて10以外を入力した場合の結果は、次の通りになります。
先ほどと表示・非表示の対応が反対ですが、ちゃんと判定が行われています。