if文

今回は条件によって動作が変わるプログラムってのをやってみます。
条件分岐にはif文と言うものを使います。
とりあえず、条件分岐とは何かについてやっていきましょう。

条件分岐とは特定の状態によって処理を換えることです。
「HPが0になったらゲームオーバーと画面を出す。
そうでなければゲームを続行する。」
などというものです。

さて、それをC言語で表現するには、下のようにします。

if(条件式)条件が揃った時に実行する文;

条件式と言うのには「比較演算子」を使った式などを書きます。
「条件が揃った時に実行する文」というのは、一つの文しかかけません。
文が長いと、上の形式では読みにくくなっていくので、普通、下のような書き方をします

if(条件式)
  条件が揃った時に実行する文;

次に、条件式の使い方の例を出します。

int x;
/*・・・・中略・・・・*/
if(x==1)
  printf("xは1ですよ");

「==」というのは、「左辺と右辺が同じ場合」と言う意味になります。
まず、これを使ってプログラムを作ってみましょう。

/*1と2以外を入力された時の処理無し*/
#include <stdio.h>

int main(void)
{
  int key=0;
  printf("プログラミングは好き? 1=好き 2=嫌い:");
  scanf("%d",&key);
  if(key==1)
    printf("そりゃそうでしょう。\n");
  if(key==2)
    printf("きっと好きになれますよ....多分\n");
  return 0;
}

上のサンプルの様に条件分岐による処理が、1つの文の場合はいいのですが、
2つ以上の場合は不便ですね(*)。これを解決するためにブロックを作ります。
別に複雑じゃありません。ただ中括弧 {} で囲むだけです。

if(条件式){
  文1;
  文2;
  ...(中略)...
  文n;
}

当然、以下のものは失敗します。

if(条件式)
  条件分岐で文1;
  条件分岐で文2;  /*いつでも実行されてしまう*/

(*)ニ文以上でも以下の様にすればブロックを使わずにできる。
if(x==1)printf("xは");
if(x==1)printf("1です\n");

しかし、読みにくく処理速度も遅く、特にそうする意味は無い。

少し複雑な話になりますが、例えば「x==1」といった式。
これは「x が 1 の時 1 を返す」意味になるです。
関数の章に逆戻りした気分になりますね。
次の様にしたらすぐにわかります。

#include <stdio.h>

int main(void)
{
  int x=0;
  printf("x==0の式 %d\n",x==0);
  printf("x==1の式 %d\n",x==1);
  return 0;
}

------------------------------------
実行結果
x==0の式 1
x==1の式 0
------------------------------------

これを見て気付いた人もいるかもしれませんが、
if文は条件式の部分が真だったら実行すると言う仕組みでできています。
そのため、2でも3でも実行されます。

#include <stdio.h>

int main(void)
{
  if(1)
    printf("実行されますよ\n");
  if(2)
    printf("これも実行されますよ\n");
  if(0)
    printf("実行されません(;_;)\n");
  return 0;
}


if文は条件式の部分が真であれば実行する。
(真とは0以外の値、偽とは値0のこと)