30代から始めるC言語

【これでOK】C言語のif文・else文を使った条件分岐のやり方とは…?複数条件もご紹介!

トビタカ
トビタカ
本記事ではC言語の基本的な条件分岐をご紹介しています。

プログラムに多彩な機能を持たせる条件分岐のやり方とは…?

 

条件によってプログラムの動きを変えたい!

 

前回の記事で条件分岐に必要な『条件式の作り方』をマスターすることができました。

C言語の条件式で必ず使う『関係演算子』と『論理演算子をマスターしよう! 条件によってプログラムの動作を変えたいんだけど… 前回の記事でC言語の数値計算ができるようになりました! ...

ということは、次に学んでいくのはもちろん…

とび助
とび助
条件分岐ですよね…?
トビタカ
トビタカ
はい!!

 

条件分岐とは『条件を満たしたときに特定の処理を行う方法』のことです。

この機能をマスターすれば、いろんな動作をするプログラムを作ることができます。

ぜひマスターして、プログラムの幅を広げていきましょう。

とび助
とび助
はやく教えてください!
トビタカ
トビタカ
では、基本的な条件分岐を一緒に学んでいきましょう!

条件分岐の機能を持つ『if文』を使ってみよう!

C言語で条件分岐を使いたいときは、次のようなコードを書けばOKです。

条件分岐のやり方

if(条件式){処理}

 

このコードは『if文』もしくは『if関数』と呼ばれるもので、条件分岐の機能を持っています。

if関数への引数となる『条件式』の部分には、前回の方法で作った条件式を記入してください。

そして、『処理』の部分には『条件を満たしたときに行いたい処理』を書けばOKです。

例えば、i=1のときに『あ』を表示したいなら、if(i==1){printf(“あ\n”);}みたいなイメージになります。

この形式のコードを書くと、条件式の評価結果が1になったときに、{}の中に書いた処理を実行することができるのです。

とび助
とび助
思ったよりシンプルなんですね!
トビタカ
トビタカ
そうなんです!ではプログラムを一緒に例を見ていきましょう!

 

それでは、次のプログラムを実行してみましょう。

#include<stdio.h>

int main(void) {
	int i = 0;
	printf("10を入力してください!→");
	scanf("%d", &i);

//*****新しく追加*****
	if (i == 10) {
		printf("正解です!\n");
	}
//*****ここまで*****

	return 0;
}

 

このブログラムを実行すると、『10を入力してください!→』と表示されると思います。

そして、キーボードで『10』を入力すると『正解です!』と表示されるプログラムなんです。

トビタカ
トビタカ
では、『10』以外の数値である『20』を入力したらどうなるのでしょうか?
とび助
とび助
何も表示されませんでした。

 

先程のプログラムで、10以外の数値を入力すると何も表示されないことが確認できたと思います。

このことから、if文の{}に書いた処理は条件式を満たしたときにだけ実行されていることがわかるのです。

トビタカ
トビタカ
このようなシンプルなコードを書くだけで、条件分岐が使えるのです!
とび助
とび助
思ったより簡単なんですね!

条件式を満たさないときの処理は『else文』で追加しよう!

とび助
とび助
でもさっきのコードだと、条件を満たさないときの処理がないですよね…
トビタカ
トビタカ
もちろん、その方法も準備されていますよ!

 

次のコードを書くと、条件式を満たさなかったときの処理を追加することができます。

条件式を満たさないときの処理

else{処理}

この文は『else文』と呼ばれるもので、書く場所は『if文の後』になります。

さっそくプログラムをみてみましょう。

#include<stdio.h>

int main(void) {
	int i = 0;
	printf("10を入力してください!→");
	scanf("%d", &i);

	if (i == 10) {
		printf("正解です!\n");
	}

//*****新しく追加*****
	else {
		printf("ちゃうわ!\n");
	}
//*****ここまで*****

	return 0;
}

 

 

このプログラムはさっきのプログラムにelse文を追加したものになります。

なので、10を入力したときに『正解です!』と表示される機能は変わっていません。

では、次に『20』を入力してみましょう。

どんな動作になったでしょうか?

とび助
とび助
『ちゃうわ!』って怒られました(泣)
トビタカ
トビタカ
気を落とさないでください(笑)

 

10以外の数値を入力すると『ちゃうわ!』と表示されたと思います。

つまり、if文の条件を満たさなかったときは、else文の処理が実行されているのです。

このように、if文の後にelse文を書けば、『if文の条件式以外』という2つめの条件を付け加えることができます。

トビタカ
トビタカ
ちなみにif文を使わずにelse文を書くとエラーになりますよ。
とび助
とび助
ifとelseはセットなんですね!

『else if文』で3つめの条件を追加してみよう!

if文を使っていくと、『3つ目の条件を追加したい!』と思うときが必ずきます。

というのも、世の中には『じゃんけん』のように、3種類以上の条件分岐になるものがたくさんあるからです。

このようなときには、次のようなコードを追加します。

3つ以上の条件を付け加える方法

else if(条件式){処理}

 

これは『else if文』と呼ばれるコードになります。

もちろん、書く場所はif文とelse文の間です。

というのも、3つ目の条件を加えるときには、『条件1・条件2・それ以外』というようにする必要があるからです。

『条件1』はif文が、『それ以外』はelse文が担当しているので、『条件2』を担当するelse if文はその間に書く必要があります。

トビタカ
トビタカ
実例をみた方が分かりやすいので、さっそくプログラムを見てみましょう。

 

#include<stdio.h>

int main(void) {
	int i = 0;
	printf("10を入力してください!→");
	scanf("%d", &i);

	if (i == 10) {
		printf("正解です!\n");
	}

//*****新しく追加*****
	else if ((i == 11) || (i == 9)) {
		printf("おしい!\n");
	}
//*****ここまで*****

	else {
		printf("ちゃうわ!\n");
	}

	return 0;
}

 

if文とelse文は先程のプログラムから変更していません。

なので、10を入力すれば『正解です!』を、20を入力すれば『ちゃうわ!』と表示されます。

では、今回は試しに『11』か『9』を入力してみてください。

とび助
とび助
『おしい!』って表示されました!
トビタカ
トビタカ
else if文が発動しましたね!

 

このような結果になった理由をコードを見て確認してみましょう。

『11 or 9』を入力した場合は、if文の『i==10』という条件を満たすことはありません。

なので、if文の処理は実行されないことはお分かりだと思います。

 

では次のelse if文の条件式をみてください。

((i==11) || (i==9))という条件式が書かれています。

この条件の意味は覚えていますよね?

トビタカ
トビタカ
||はORと呼ばれる演算子ですよ。
とび助
とび助
ということはどちらかの条件を満たせばOKってことですね!
トビタカ
トビタカ
素晴らしい!

 

else if文の条件式は『9』か『11』のどちらかが入力されたときに成立します。

そのため、今回のように『11 or 9』を入力すると、else if文が発動するのです。

その結果、else if文の処理にかかれている『おしい!』が表示されることになります。

とび助
とび助
もしかしてelse if文をさらに追加することってできます…?
トビタカ
トビタカ
はい!そうすれば4つ以上の条件分岐を作ることができますよ!

条件分岐を4つ以上にしたい場合は、else if文をさらに追加すればOKです。

書く場所はもちろん、elseの前になります。

そのようなコードを書けば、1つ目のelse if文の条件を満たさなかったときに、2つ目のelse if文の判定が行われます。

このような方法でたくさんの条件を追加することが可能です。

とび助
とび助
じゃあelse ifを使いまくります!
トビタカ
トビタカ
最初のうちはそれでいいと思いますよ!

 

実は、実際の開発では『else』『else if』はあまり使わない方がいいです。

というのも、これらを多用してしまうとメンテナンスが難しいプログラムになるからです。(この対策として『早期return』があります。)

でも最初のうちは使っても問題ないので、気にせず使って練習してみてください!

トビタカ
トビタカ
実際の開発でよく使う『早期リターン』や『条件分岐をスマートにする方法』は後日ご紹介しますね!

注意点:もし複数の条件式に当てはまったときは…?

とび助
とび助
そういえば、もしif文の条件式とelse if文の条件式の両方に合致したら、どうなるんですか…?
トビタカ
トビタカ
素晴らしい着眼点ですね!

これからプログラムを書いていくうちに、if文の条件式とelse if文の条件式の両方に当てはまることもあるかもしれません。

例えば次のプログラムのイメージです。

#include<stdio.h>

int main(void) {
	int score = 0;
	printf("点数を入力してください!→");
	scanf("%d", &score);

	if (score >= 80) {
		printf("特待生\n");
	} 
	else if (score >= 60) {
		printf("合格\n");
	}
	else {
		printf("不合格!\n");
	}

	return 0;

}

 

このプログラムはテストの点数を入力すると『特待生・合格・不合格』のいずれかを出力するプログラムです。

実行すると『点数を入力してください!→』と表示されますので、キーボードで点数を入力しましょう。

『50』を入力すると『不合格』が、『70』を入力すると『合格』が表示されると思います。

とび助
とび助
『50』ならelseの条件、『70』ならelse ifの条件に当てはまるからですよね…?
トビタカ
トビタカ
はい!そのとおりです!

 

では、最後に『90』を入力する場合を考えてみましょう。

この場合、『if文の条件式』と『else if文の条件式』の両方に当てはまることになります。

2つの条件に当てはまるのだから『特待生』と『合格』が表示されるように思えるのですが…

実は『特待生』しか表示されないんです。

とび助
とび助
どうしてですか…?
トビタカ
トビタカ
それはelse if文に発動条件があるからです!

 

実はelse if文とelse文には発動条件があります。

それは『これまでの条件式を満たさなかったときだけ発動する』という条件です。

先程のプログラムの場合、else if文の前にあるのはif文ですよね。

そのため、if文に当てはまらないときにしかelse if文は発動しないのです。

よって、先程のプログラムで90を入力すると、if文の条件に合致することになるので、else if文とelse文は無視されることになります。

その結果『特待生』しか表示されなかったんです。

とび助
とび助
なるほど!じゃあ条件式に被っている部分があっても安心ですね!
トビタカ
トビタカ
その考えは危険ですので絶対にやめてください!

 

たしかに、先程ご紹介した発動条件を考慮すると条件式に重複があっても良さそうな気がします。

でも、実際の開発では絶対にダメです。

条件式に重複がある時点で、上司に『条件式をきちんと考えられていない』と修正指示を出されることになりますし。

別の人がコードを読んだときに『条件を重複させるということは何か特別な意図がある』と思われてしまい、保守が難しくなります。

このような条件式の重複は開発現場に混乱をもたらすだけなので、条件式は重複しないようにきちんと作りましょう!

とび助
とび助
わかりました!きちんと条件式を作ります!
トビタカ
トビタカ
それがいいと思います!

まとめ

以上が基本的な条件分岐のやり方です。

『if』『else』『else if』を使うだけで、多種多様な条件分岐ができるようになります。

まずは、これらを駆使していろんな機能をもつプログラムを作ってみてください!

C言語のif文の使い方まとめ
とび助
とび助
早速、条件分岐のコードを書いてみます!
トビタカ
トビタカ
いいですね!次の記事ではもう1つの条件分岐のやり方をご紹介しますよ!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA