30代から始めるC言語

【C言語】もう1つの条件分岐!switch文の使い方とは…?

トビタカ
トビタカ
本記事では、もう1つの条件分岐のやり方をご紹介しています。

if文と少し違った条件分岐の機能を持つ『switch文』とは…?

 

else ifをたくさん書くがめんどくさい!

 

前回は『if』『else』『else if』を使った基本的な条件分岐のやり方をマスターしました。

【これでOK】C言語のif文・else文を使った条件分岐のやり方とは…?複数条件もご紹介! 条件によってプログラムの動きを変えたい! 前回の記事で条件分岐に必要な『条件式の作り方』をマスターすること...

これらの条件分岐は使い方が簡単なので、とっても便利なのですが…

条件分岐が5個を超えはじめると、書くのがしんどいですよね…?

トビタカ
トビタカ
月ごとで処理を分けるプログラムなら、12個のifやelse ifが必要になりますからね!
とび助
とび助
たしかにたくさん書くのはしんどいです!

 

そんなときに役に立つのが今回ご紹介する『switch文』です。

分岐する条件がたくさんある場合は、switch文のほうがif文よりスッキリしたコードになるので、ぜひ使ってみてください!

とび助
とび助
使ってみたいです!
トビタカ
トビタカ
では、一緒に学んでいきましょう!

 

複数の条件分岐を綺麗にまとめるswitch文とは…?

今回ご紹介する『switch文』は、『==』を使った条件分岐をシンプルにまとめる方法です。

switch文を使うと『num==1』などの条件式を何度も書く必要がなくなるので、スッキリと読みやすいコードにすることができます。

 

switch文を使うには、次のようなコードを書けばOKです。

C言語のswitch文の書き方
とび助
とび助
if文と結構違いますね…
トビタカ
トビタカ
大丈夫!慣れれば簡単です!

 

switch文の動き方や使い方はプログラムを見たほうがわかりやすいので、まずは例を見てみましょう。

// 入力された数値が1 or 2 or それ以外を判別する
#include<stdio.h>

int main(void) {

	// 説明を表示して数値の入力を受け付ける
	int num;
	printf("1か2を入力してください→");
	scanf("%d", &num);

	// 入力された数値によって動作を分ける
	switch (num) {
	case 1:		// 1が入力されたとき
		printf("One\n");
		break;
	case 2:		// 2が入力されたとき
		printf("Two\n");
		break;
	default:	// それ以外が入力されたとき
		printf("クソが!\n");
		break;
	}

	return 0;

}

 

このプログラムは入力された数値が『1』or『2』or『それ以外』であることを判別するプログラムになります。

ぜひこのプログラムを2回実行してみてください。

『1か2を入力してください→』と表示されたら、1回目は『1』を、2回目は『2』を入力してみましょう。

とび助
とび助
『One』『Two』って表示されました。
トビタカ
トビタカ
OKです!ではそれ以外の数字も入力してみましょう!
とび助
とび助
『クソが!』って表示されました(泣)

 

このようにswitchを使うことで、『指定した数値 or それ以外』で動作を変えることができます。

特に注目すべきポイントは、『case 2:』という部分です。

後ほど詳しく解説いたしますが、この部分は『num==2』という条件を意味しています。

if文だと『1 or それ以外』しか判別できなかったのですが、switch文なら『1以外の値』で分岐させることができるのです。

とび助
とび助
ということはcase1〜12を作れば、月ごとで処理を変えたプログラムを作れるんですね…?
トビタカ
トビタカ
はい!そのとおりです!
とび助
とび助
使いどころが分かってきました!

switch文とcase・defaultの使い方

続いては、switch文の使い方をご説明していきます。

先程ご紹介したswitch文の使い方をもう一度ご覧ください。

C言語のswitch文の書き方

 

まずは①『switch(条件)』という部分です。

この『(条件)』の部分には『変数』や『変数を使った計算式』を書きます。

先程のプログラムの例では、『switch(num)』と書くことで、変数numの値によって動作を分けていたのです。

なお、条件の部分にはif文で使った条件式を書くこともできます。

しかし、switchでは条件式を使うことはありません。

『1 or 0』しか出力できない条件式を使ってしまうと、『1以外で条件分岐ができる』というswitch文のメリットがなくなってしまうからです。

とび助
とび助
switchのときは変数を条件に使うことが多いんですね!
トビタカ
トビタカ
そういう認識でOKです!

 

次は②『case 値:』の部分に関してです。

この『値』の部分には『動作を変えたいときの条件の値』を記入します。

例えば『case 2:』と書いた場合、条件に書いた変数が『2』になったときに動作を変えることができるのです。

トビタカ
トビタカ
caseを書くことで『条件 == 値』という条件式が設定されるイメージになります。
とび助
とび助
なるほど!
トビタカ
トビタカ
また、caseの最後にはセミコロンではなくコロン『:』を書くので注意してくださいね!

 

このように、switch文は『(条件)に書いた変数』が『caseの後に書いた値』と一致したときに分岐します

そして、当てはまったcaseの直後に書いた③の処理が実行されるのです。

先程のプログラムの例であれば、numが1になると直後に書かれた『printf (“One\n”);』が実行されて『One』が表示されるイメージになります。

numが2になった場合も同様に、『printf(“Two\n”);』が実行されるのです。

このように複数のcaseと処理を書いていくだけで、たくさんの条件分岐をシンプルにまとめることができます。

とび助
とび助
ちなみに条件に当てはまらなかった場合はどうなるんですか…?
トビタカ
トビタカ
そのときはdefaultが発動します!

 

条件には変数を使っているので、変数がcaseの値に一致しないときもあるでしょう。

その時は④の『default』が発動します。

『default』は『else』と同じような機能を持っているので、条件に当てはまらなかったときはdefaultの後に書いた処理が実行されるのです。

トビタカ
トビタカ
使い方をまとめると次のようになります!
  • switch文の条件には変数を書く
  • 分岐させたいときの値を『case 値:』で書く
  • caseに当てはまるとその直後に書いた処理が実行される
  • caseに当てはまらない時はdefaultの処理が発動する
とび助
とび助
理解することができました!

switch文で重要な『break』

とび助
とび助
ところで処理の部分に書いてあった『break;』ってなんですか…?
トビタカ
トビタカ
いいところに気が付きましたね!

 

さきほどのswitch文の使い方に『break;』というコードがあったと思います。

この『break』は今のブロック文の処理を終了させるコードです。

とび助
とび助
ブロック文って何ですか?
トビタカ
トビタカ
『{ }』で囲まれたコードの塊のことです!

 

『{ }』に挟まれているコードのことをブロック文と言います。

『クソが!』と表示する先ほどのプログラムの場合、オレンジ色の箇所がブロック文です。

ブログラムサンプルのブロック文

 

switch文を使うと、switch文全体がブロック文になっていることがお分かりだと思います。

『break』はブロック文を終了させるコードなので、switch文の途中でbreakが発動すると、switch文自体が終わることになるのです。

先ほどのプログラムで『1』を入力したときに、『case 1』の処理である『printf(“One\n”);』のコードが実行されたことを確認したと思います。

そのあとに『break;』が発動し、switch文が終了したのです。

その結果、『Case 2:』をチェックすることなく、ブロック文の後の『return 0;』が実行されることになりました。

トビタカ
トビタカ
switch文を終わらせるためには『break』が必要なので、忘れないようにしましょう!
とび助
とび助
わかりました!

switch文を使うときは、処理の最後にbreakを必ず書くようにしてください。

というのも、breakを書き忘れるとswitch文の本当の能力が発動してしまうからです。

本当の能力が発動する条件分岐として使えなくなってしまいます。

プログラム言語によっては、breakを忘れるとエラーになるものもあるので、breakを毎回つける習慣を身につけるのがオススメです。

トビタカ
トビタカ
breakを書き忘れたときに発生する現象はこちらの記事をご確認くださいね!
【C言語・switch文の注意点】breakをつけ忘れると起きるフォールスルーとは…? switch文を使っているんだけど、なんか動作がおかしい… たくさんの条件分岐をシンプルなコードで表現でき...
とび助
とび助
これは知らなかったです…

まとめ

以上がもう1つの条件分岐である『switch』の使い方になります。

switch文を使えば、たくさんの条件分岐をスッキリさせることができますので、ぜひ使ってみてください!

C言語のswitch文のサマリ
とび助
とび助
さっそく使ってみます!
トビタカ
トビタカ
次は繰り返し処理のループをご紹介しますね!

COMMENT

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

CAPTCHA