記事には広告を含む場合があります。

C言語入門講座

【C言語】switch・case・breakで複数条件分岐する方法

2022年5月21日

おゆ

組み込み系プログラマとして5年働いていた元エンジニアです。得意言語はC言語とC++。本サイトでは学生および新人組み込み系プログラマに向けてプログラミング知識をわかりやすく解説しています。

switchで条件分岐する方法を知りたい。ifとはどう使い分けたらいいの?

こんなお悩みにお答えします。

記事の内容

  • switch, case, break, defaultの使い方
  • ifとの違い、使い分け
おゆ
元エンジニアの筆者が解説します。if文はもちろん、switch文も便利なのでよく使います。

switch・case・breakで複数条件分岐する方法

switchを使うとif文のように条件によって処理を分けることができます。

例:

#include <stdio.h>
void main()
{
    int num=1;
    switch(num) //numの値によって処理を変える
    {
        case 0: //numが0かチェック、0でないので次のcase文へ
            printf("num is 0\n"); //実行されない
            break;                        //実行されない
        case 1: //numが1かチェック、1なので以下の処理を実行
            printf("num is 1\n"); //実行
            break;                        //switch文から抜ける
        //以下はすべて無視される
        case 2:
            printf("num is 2\n"); 
            break;
        default:
            printf("num is not 0,1,2\n"); 
            break;
    } 
}

実行結果

num is 1

「switch(num)」はnumの値によって処理を変えるよという宣言です。

分岐の条件は{ }内に書きます。「case 0:」はnumが0ならば処理を行うという意味です。例ではnum=1なので直後のprintfとbreakは飛ばして次のcase文に行きます。

「case 1:」はnumが1なら処理を行うという意味なので、直後にある「printf("num is 1\n");」と「break;」が実行されます。「break;」はswitch文から抜けるという命令なので「case 2:」以下はすべて無視されます。

どのcase文にも当てはまらなかった場合は「break;」で抜けないので「default:」以下の処理が実行されます。逆に「break;」が書かれていなければ必ず「default:」以下の処理は実行されます。

switchの使い方

switch(変数)
{
    case 値1:
        処理(変数が値1に等しい場合に実行)
        break;
    case 値2:
        処理(変数が値2に等しい場合に実行)
        break;
    default:
        処理(上にbreakがなければ実行)
        break;
}
  • case文はいくつ連ねてもOK
  • default文は無くてもOK
  • breakは無くてもOK(switch文を抜けてほしいタイミングで付ける)

breakは無くてもOKですが、必要なのに書き忘れるのには注意です。(よくあるミスです)

switchとifの違いと使い分け方法

ifの方ができることが多いのでよく使いがちですが、場合によってはswitchの方が適しています。

ifの使い方はこちら

【C言語】if・else文で複数条件分岐する方法と条件式の書き方

if・else分を使うと複数の条件によって処理を分岐できます。 記事の内容 if・else文を用いた複数条件の分岐 処理が1つの時の省略した書き方 入れ子(ネスト)構造 条件式の書き方と演算子(等号・ ...

続きを見る

ifとswitchの違い

違う点 switch if
条件分けできる変数の数 1つ
例:switch(a)
1つでも複数でも可
例:if(a==0 || b==0)
条件の内容 1つの値
例:case 1:
範囲指定も値指定も可
例:if(a>0), if(a==0)
switch/if文を抜けるタイミングの制御 break文で可能 不可
コードの見やすさ 見やすい switchよりは見にくい

switchが有用な場面

switchはifより制約が多いですが、switchで書ける条件下ではswitchを使った方がコードが見やすくなります

例:

#include <stdio.h>
void main()
{
    int num=1;
    switch(num)
    {
        case 0:  printf("num is 0\n");
                     break;
        case 1:  printf("num is 1\n");
                     break;
        case 2:  printf("num is 2\n"); 
                     break;
        default: printf("num is not 0~3\n"); 
                     break;
    }
    //同じ処理をif文で書いた場合
    if(num==0)
    {
        printf("num is 0\n");
    }
    else if(num==1)
    {
        printf("num is 1\n");
    }
    else if(num==2)
    {
        printf("num is 2\n");
    }
    else
    {
        printf("num is not 0~3\n"); 
    }
}

実行結果

num is 1
num is 1

switch文が見やすい理由はコードがシンプルに書けるからと、値分けしていることが明確だからです。

if文ではif(num!=3)のような文も書けるので演算子をちゃんと確認しなくてはいけません。一方でswitchはどんな数値に分けているのかだけを確認すればOKです。演算子まで確認しなくていいので読むのが若干楽です。

おゆ
switch文は制約が多い分、読み手が想定するケースが少なくて読みやすいです。

まとめ:見やすいコードを書くために

プログラムは書いて終わりではありません。未来の自分や別の人が修正したり、似たコードを書く時の参考にしたりします。そんなときに見やすいコードだと作業時間を削減できてありがたがられます。逆に見にくいコードだとイラっとします(笑)

switchで書ける文のほとんどはif文でも書けてしまいますが、より見やすいコードを書くために有用です。ぜひ使ってみてください。

ブログランキング参加中。クリックしてもらえると励みになります。

ブログランキング・にほんブログ村へ

-C言語入門講座