【C言語入門】switch-case文の使い方(数値、文字列で複数条件分岐)

こんにちは!フリーランスの長野です。

switch-case文って使ってますか?switch-case文は条件によって処理を分ける数が複数で多い場合に使われます。

例えばサイコロの目は1から6までありますが、1から6までの出た目でそれぞれ処理が違う場合などです。

また、C言語ではenumで定数を定義し、その定数名つまり文字列を使って条件分岐を記述することができます。

この記事では、switch-case文について

  • switch-case文とは
  • switch-case文、default句の使い方


という基本的な内容から、

  • enumを使って文字列で複数条件分岐
  • [補足]ループ文の中での挙動について

など応用的な使い方の内容についても解説していきます。

今回はswitch-case文について、使い方をわかりやすく解説します!

switch-case文とは

swtich-case文は条件によって処理を変える場合に使われます。条件によって処理を変える構文としてif文もあります。

if文は条件によって処理を分ける数が少ないのに対して、switch文は条件によって分ける処理が多い場合に使われます。

switch-case文、default句の使い方

swtich-case文は次のように記述します。

swtich-case文では値が一致して処理を行ったあとに「break」句を使って処理を抜けなければ、後の処理が続けて実行されてしまいますので注意してください。

値が一致しなかった場合の処理は「default:」句のあとに記述します。

基本的な使い方

簡単な使い方についてサンプルコードでみていきましょう。

実行結果:

このサンプルコードでは、int型の変数「num」が1から6のいずれかの値と一致した場合に、それぞれの処理が行われます。

defaultの使い方

defaultでは値が一致しなかった場合の処理を記述します。

簡単な使い方についてサンプルコードでみていきましょう。

実行結果:

このサンプルコードでは、int型の変数「num」が1から6のいずれかの値と一致した場合に、それぞれの処理が行われますが、変数「num」に代入された値は0(ゼロ)です。

1から6の値のいずれとも一致しませんので、defaultで定義した処理が実行されています。

enumを使って文字列で複数条件分岐

enumで宣言した文字列名を使ってswitch-case文を記述することができます。enumの定数は0(ゼロ)から順に整数が割り当てられるからです。enumはオブジェクトを定義し、そのオブジェクトにenumの定数を代入して使用します。

switch文の式にはenumのオブジェクトを記述し、caseの値にはenumの定数名つまり文字列名を記述することができます。

サンプルコードで確認していきましょう。

実行結果:

このサンプルコードではenum型のオブジェクト「wk」を定義しています。オブジェクト「wk」にenum型「week」の定数「Wed」を代入しています。

switch文の式にはwkを記述し、caseの値にはenum型「week」の定数を指定しています。caseの値にはenum型「week」の定数つまり文字列名を記述しているので、場合分けの条件が読みやすくなるメリットがあります。

なお、このswitch-case文ではいくつかのcaseで「break」句を記述していません。

いくつかのcaseで同じ処理を行いたい場合は、そのcaseで「break」句を記述しなければ、次に記述された「break」句に到達するまで処理が続きます。

そうすることで同じ処理でまとめることができます。

[補足]ループ文の中での挙動について

今回switch文で使用した「break」句。プログラムに詳しい人なら、ループを抜けるために使ったりすることもご存知でしょう。

ではループ文の内部に、switch文を書いている場合に使用した「break」句はどんな挙動をするのでしょう?

例えばこんな状況下でのbreak句です。これはループ処理に反映されるのか?switch文に反映してくれるのか?

最後にそれを知っておきましょう!

またループ文の時に「break」句と合わせてよく使われる「continue」句での挙動も合わせてみておきましょうか。

break句はどこに反映されるの?

以下はfor文の中のswitch文を使っているサンプルコードです。

実行結果:

for文の内部で、break句を使用すると、forを抜けるはずですが…

ループは終了されていません。switch文の中で使用する場合は、switch文へ反映されて、ループ文へは影響していないことがわかると思います。

実戦ではよくある組み合わせなので、初心者の方はこのことはよく覚えておきましょう。

ではcontinue句は?

では同じ状況でcontinue句を使ったらどうなるのか?実際使うかどうかは置いておいて、ちょっと気になってしまうところですね!

早速みてみましょう。

実行結果:

ちょっと表示が多くややこしく感じるかもしれませんが…

中でも重要な箇所は結果の以下の部分です。

continueへ来た時に「continue後」や「switch文終了」の表示が行われずに、2回目のループが開始されています。

「次のループが始まった」つまり、ループ文へ影響したということです。

  • switch文内部のbreak句は、外のループ文へ影響しない
  • switch文内部のcontinue句は、外のループ文へ影響する

地味に混乱を招く場所なので、このことは覚えておきましょう。

※実際phpでは、switch文内の、continu句はbreak句として扱われたりします。複数言語を扱う人ほど混乱する場所です。覚えておきましょう。

まとめ

ここでは、switch-case文について説明しました。switch-case文は条件によって処理を分ける数が多い場合に使うと便利です。

またenumの定数を使って記述すると文字列名で場合分けを記述できるので読みやすくなります。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説