C言語のswitch-case文で条件分岐を行う方法
- 作成日: 2022-01-23
- 更新日: 2023-12-25
- カテゴリ: C言語
C言語のswitch-case文の書き方
C言語には色々な文があります。
if文、for文、return文……。
その中にswitch文(switch-case文)という文もあります。
このswitch文は変数が特定の値だった時に、その値用の処理にジャンプして処理を行える文です。
switch文にはcaseやdefault, break文も使われます。
この記事ではC言語のswitch文について詳しく解説します。
関連記事
目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】
プログラミングのポインタをわかりやすく解説【C言語】
コードで見るC言語とC++の7つの違い
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文でコードをかっこよくしよう
🐭 < if文も思い出してあげてね