C言語のswitch-case文で条件分岐を行う方法
目次
C言語のswitch-case文の書き方
C言語には色々な文があります。
if文、for文、return文……。
その中にswitch文(switch-case文)という文もあります。
このswitch文は変数が特定の値だった時に、その値用の処理にジャンプして処理を行える文です。
switch文にはcaseやdefault, break文も使われます。
この記事ではC言語のswitch文について詳しく解説します。
関連記事
switch文の構造
switch文は↓のような構造になっています。
switch (変数) { case 値1: ~処理~ break; case 値2: ~処理~ break; default: ~処理~ break; }
switch文は最初にswitch
というワードを書きます。
そしてその後のカッコの中に変数を置きます。
switch文をその変数の値を見ます。
そしてその値が書かれたcaseにジャンプします。
case
にジャンプしたら処理を実行します。
そしてbreak
文でswitch文から脱出します。
case
と一緒に値を書いておくと、switch文の分岐を増やすことができます。
↑の例ではcase 値1:
とcase 値2:
の2つになってます。
それからdefault
ですが、ここにはいずれのcase
の値にもマッチしなかった場合にジャンプします。
つまりカッコの中の変数の値が値1でも値2でも無かった場合にdefault
にジャンプします。
switch文ではcase
やdefault
の処理が終わったらbreak
文を書いておくという約束事(守らない場合もある)があります。
これはswitch文から脱出するためです。
break
を書かない場合はそのまま下のほうに処理が移動します。
int変数のswitch文を書く
それでは実例としてint型の変数を使ってswitch文を書いてみます。
#include <stdio.h> int main(void) { int n = 2; switch (n) { case 1: puts("1です"); break; case 2: puts("2です"); break; default: puts("1でも2でもありません"); break; } return 0; }
↑のコードをコンパイルして実行すると↓の結果になります。
2です
↑のコードですが、まずmain関数内でint型の変数n
を定義しています。
int n = 2;
この変数をswitch文に使います。
switch
の後のカッコの部分にn
を置きます。
switch (n) { ... }
変数n
の値は2
です。
そのためswitch文はcase 2:
にジャンプします。
... case 2: puts("2です"); break; ...
case 2:
の処理ではputs()
関数で「2です」と出力しています。
出力が終わったらbreak文でswitch文から抜け出します。
変数n
の値を1
に変えるとcase 1:
にジャンプします。
またn
の値を3
や4
にした場合はdefault:
にジャンプします。
変数の値を変更して色々実験してみてください。
switch文で使える変数の型
switch文で判定できる変数の型は、整数のみです。
そのため実数や文字列は使うことができません。
switch (1.23) { // コンパイルエラー } switch ("string") { // コンパイルエラー }
enumの定数は整数扱いなのでswitch文に使うことができます。
#include <stdio.h> enum { ONE = 1, TWO = 2, }; int main(void) { switch (ONE) { case ONE: puts("1です"); break; case TWO: puts("2です"); break; } return 0; }
↑のコードはコンパイルして実行すると「1です」と出力されます。
caseとdefaultの順番
switch文のcaseとdefaultは順番は決められていません。
ですので好きなように書くことができます。
たとえば
switch (n) { case 1: // 処理 break; default: // 処理 break; }
だったり、
switch (n) { default: // 処理 break; case 1: // 処理 break; }
だったりです。
default
を先に書いておいたほうがわかりやすいという人もいますし、そうでないという人もいます。
ここら辺は好みになりそうです。
ただcaseが多くなる場合はdefaultは先頭に書いたほうがいいかもしれません。
フォールスルー・テクニック
switch文ではbreak文を書かないとswitch文からただちに脱出できません。
この特性を利用したのが「フォールスルー」です。
switch (n) { case 1: // fallthrough case 2: // fallthrough case 3: printf("%d\n", n); break; }
↑のswitch文では変数n
の値が1
だった場合、case 1:
にジャンプします。
しかしcase 1:
にはbreak文が書かれていません。
そのためswitch文から脱出せずにそのまま下の処理(case 2:
)に進みます。
case 2:
にもbreak文が書かれていません。
そのため下の処理(case 3:
)に移動します。
このようにフォールスルーを利用すると複数の値の処理をひとつのcaseにまとめることができます。
これはわりとよく使われるテクニックなので覚えておきましょう。
おわりに
今回はC言語のswitch-case文について解説しました。
switch文を使うと処理をコンパクトにできることもあります。
(^ _ ^) | switch文でコードをかっこよくしよう |
(・ v ・) | if文も思い出してあげてね |