C言語(C/C++) 制御フロー のドキュメント

switch case文を利用した条件分岐処理

C/C++でswitch~case文を使った条件分岐処理を紹介します。

書式

switch文の書式は下記です。

 switch(判定する変数・式・関数)
 {
   case 値1:
     ...処理;
     break;
   case 値2:
     ...処理;
     break;
   ...
   default:
     ...処理;
     break;
 }

defaultは省略可能です。

 switch(判定する変数・式・関数)
 {
   case 値1:
     ...処理;
     break;
   case 値2:
     ...処理;
     break;
   ...
   case 値n:
     ...処理;
     break;

「判定する変数・式・関数」の値をcase文で判定し、条件と一致する場合はcaseに続く処理を実行します。どの条件にも当てはまらなかった場合は、default:ブロック内の処理を実行します。C/C++ではcaseブロックの中にbreak,returnといったswitch文から抜ける記述は必須ではありません。(C#は必ず必要であり、break,returnがない場合はコンパイルエラーとなります。

プログラム例

コンソールアプリケーションを作成し、下記のコードを記述します。

コード

#include "stdafx.h"
#include <stdlib.h>

int main()
{
  printf("数値を入力してください。");
  char buffer[8];

  fgets(buffer, 8, stdin);
  int value = atoi(buffer);

  switch (value) {
  case 0:
    printf("0が入力されました。");
    break;
  case 1:
    printf("1が入力されました。");
    break;
  case 2:
    printf("2が入力されました。");
    break;
  case 3:
    printf("3が入力されました。");
  default:
    printf("定義されていない値が入力されました。");

  }

  return 0;
}

解説

下記コードで、アプリケーションを実行すると、「数値を入力してください。」のメッセージが表示され、入力待ちになります。入力された値は、atoi関数でint型の値に変換されます。

  printf("数値を入力してください。");
  char buffer[8];

  fgets(buffer, 8, stdin);
  int value = atoi(buffer);


下記コードがswitch文になります。入力された値に応じたメッセージが画面に表示されます。入力された値が0,1,2,3の場合は値に応じたメッセージが表示され、それ以外の場合は「定義されていない値が入力されました。」のメッセージが表示されます。

  switch (value) {
  case 0:
    printf("0が入力されました。");
    break;
  case 1:
    printf("1が入力されました。");
    break;
  case 2:
    printf("2が入力されました。");
    break;
  case 3:
    printf("3が入力されました。");
  default:
    printf("定義されていない値が入力されました。");

  }

実行結果

プロジェクトを実行します。コマンドプロンプトウィンドウが表示され、下図の画面が表示されます。
switch case文を利用した条件分岐処理:画像1

数値を入力します。"2"を入力し[Enter]キーを押します。
switch case文を利用した条件分岐処理:画像2

「2が入力されました。」のメッセージが表示されます。
switch case文を利用した条件分岐処理:画像3

"0"を入力した場合は「0が入力されました。」のメッセージが表示されます。
switch case文を利用した条件分岐処理:画像4

8を入力した場合は、caseにない値のため、defaultのブロックが実行され、「定義されていない値が入力されました。」のメッセージが表示されます。
switch case文を利用した条件分岐処理:画像5


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2018-03-09