C言語

条件文(if文)

条件文の基本」では、条件について学習しました。
この条件の結果に応じて処理を行うという文を記述する際に使用するif文の基本的な使い方について解説します。

if文の仕組み

if文は、条件が成立する(真)の場合に指定した文を処理する構文です。
if文の構文は次のようになります。

if( 条件 ) {
文;

}

カッコ内に条件を記述し、条件が満たされた場合(真の場合)に、文が処理される仕組みになっています。

それでは、実際にソースコードを入力して実行します。

#include <stdio.h>

int main(void)
{
  int number;
  
  printf("5を入力してください。\n");
  scanf("%d", &number);
  
  if( number == 5 ) {
    printf("5が正しく入力されました。\n");
  }

  printf("処理が終了しました。\n");

  return 0;
}

5を入力した場合の結果

5を入力してください。
5
5が正しく入力されました。
処理を終了しました。

5以外(1)を入力した場合の結果

5を入力してください。
1
処理を終了しました。

if( number == 5 ) は、「変数numberの値が5の場合」という条件が成立した場合、直後の { } 内の文である
printf("5が正しく入力されました。\n"); が実行されました。
条件が満たされていない場合(偽の場合)は、直後の文は実行されていないことがわかります。
このように、if文の括弧内に条件を記述し、条件が成立した場合、直後にある{ } 内にある文が実行されいます。

if文の条件が真だった場合に、1つの文を実行しましたが、{ } 内であれば、複数の文を実行することもできます。

#include <stdio.h>

int main(void)
{
  int number;
  
  printf("5を入力してください。\n");
  scanf("%d", &number);
  
  if( number == 5 ) {
    printf("5が正しく入力されました。\n");
    printf("5を入力した場合の処理です。\n");
  }

  printf("処理が終了しました。\n");

  return 0;
}

5を入力した場合の結果

5を入力してください。
5
5が正しく入力されました。
5を入力した場合の処理です。
処理が終了しました。

5以外(1)を入力した場合の結果

5を入力してください。
1
処理が終了しました。

このように、先ほどの結果と比べると、5以外を入力した場合は、先ほどの結果と同じであるのに対して、5を入力した場合は、メッセージが2つ表示されていることがわかります。

if文に { }(ブロック)を付けない場合

if文に { } (ブロック)が付いていますが、文が1つの場合は、このブロックがなくても記述することができます。

次のように、最初のソースコードと同じものを使用して、ブロックの記述をなくした場合

#include <stdio.h>

int main(void)
{
  int number;
  
  printf("5を入力してください。\n");
  scanf("%d", &number);
  
  if( number == 5 )
    printf("5が正しく入力されました。\n");

  printf("処理が終了しました。\n");

  return 0;
}

この場合、エラーにはならず、結果も同じであることが確認できるはずです。
ただし、ブロックを省略する記載は避けるべきです。
理由は、次のソースコードを実行するとわかるかもしれません。
これは、2つ目のサンプル(if文の{ } 内に2つの文を記述したもの)で使用したソースコードからif文のブロックを削除したものです。
このソースコードを実行して、5以外を入力してください。

#include <stdio.h>

int main(void)
{
  int number;
  
  printf("5を入力してください。\n");
  scanf("%d", &number);
  
  if( number == 5 )
    printf("5が正しく入力されました。\n");
    printf("5を入力した場合の処理です。\n");

  printf("処理が終了しました。\n");

  return 0;
}

5以外を入力した場合の結果

5を入力してください。
1
5を入力した場合の処理です。
処理が終了しました。

いかがでしょうか、本来、「5を入力した場合の処理です。」は、出力することは想定していなかったはずなのに、表示されてしまいました。
ブロックを付けない場合、if文の条件が成立したときに実行される処理は、1文のみなので、12行目のprintf関数は、条件が成立していなくても出力されてしまうのです。
12行目のprintf関数の処理がif文の条件が成立したときに実行させたいのか、成立しなくても実行させたいのかが、わかりにくいですよね。
このため、基本的には、ブロックは省略しないことをおススメします。

Web系の開発では、なるべく短い文にする文化があるため、ブロックを省略することがあります。
ただ、それでも、大規模開発では、大勢がかかわるため、やはりブロックを付けることを推奨されているようです。

まとめ

if文に使った条件は 等しい(==)のみでしたが、もちろん、いろんな比較演算子(>=、<=、>、<、!=)や、論理演算子(&&、||、!)を組み合わせて、条件にすることができます。
いろいろ試してみてください。
また、if文の複雑な条件などについては、別の記事にする予定です。

  • if文を使って、条件に応じた処理を行うことができる。
  • if文の条件が成立したときの処理は、複数の文を記述することができる。
  • if文の条件が成立した場合の処理が、1文のみの場合は、ブロック( { } )を省略できる。
  • ただし、ブロックの省略はわかりにくいため、推奨しない。

-C言語