switch文 条件分岐2
switch文
if文を使えば大抵の条件分岐には対応できます。
しかし、ある変数の値に応じて複数の分岐をしたい場合にはswitch文を用いたほうが簡潔に書けます。
#include <stdio.h>
int main()
{
char str[] = "ABC";
int length = sizeof(str) - 1;
switch (length)
{
case 0:
printf("strは0文字");
break;
case 1:
printf("strは1文字");
break;
case 2:
printf("strは2文字");
break;
case 3:
printf("strは3文字");
break;
default:
printf("strは4文字以上");
break;
}
getchar();
}
strは3文字
- switch(式){ case 定数式: 文 break; [ case 定数式: 文 break; [ default: 文 break;]]}
- 式を評価した値とcase定数式が一致する文を実行する
switch文は、最初に丸括弧内の値を評価します。
ここに指定できるのは整数値か、計算の結果が整数型になる式です。
(「1 + 2」などの式でも良い)
次に、指定された値に一致する値が指定されたcase句を探し、その文を実行します。
一致するcase句がない場合はdefault句の文を実行します。
default句は省略することも可能です。
case句、default句の末尾はセミコロン(;
)ではなくコロン(:
)であることに注意してください。
case句に指定できる値は定数のみです。
(リテラル含む)
また、同じ値のcase句を重複して定義することはできません。
int num = 1;
switch (0)
{
//case句に変数は指定できない
case num:
break;
}
switch (0)
{
case 0:
break;
//case句の値は重複できない
case 0:
break;
}
break文
それぞれのcase句の文の最後にはbreak文が指定されています。
コードがbreak文に到達すると、現在のswitch文やループを抜けます。
(ループに関しては別途説明します)
このbreak文を書くのを忘れると、switch文はおかしな動作となります。
#include <stdio.h>
int main()
{
char str[] = "ABC";
int length = sizeof(str) - 1;
switch (length)
{
case 0:
printf("strは0文字");
case 1:
printf("strは1文字");
case 2:
printf("strは2文字");
case 3:
printf("strは3文字");
default:
printf("strは4文字以上");
}
getchar();
}
strは3文字strは4文字以上
このswitch文の式の値は3なので、case 3:
のcase句が実行されます。
しかしその後のdefault句の文まで実行されています。
これはcase句の最後にbreak文がないため、switch文の処理は中断されずそのまま次の句(今回はdefault句)にまで処理が移ってしまうのです。
あえてこの動作を利用したコードを書くこともできます。
switch (0)
{
case 0:
case 1:
//処理A
break;
case 2:
//処理B
case 3:
//処理C
break;
}
上記コードは、条件が0または1の場合に処理Aが実行されます。
条件が2の場合は処理Bと処理Cが実行されます。
条件が3の場合は処理Cのみが実行されます。
なお、break文はswitch文内またはループ文内以外の箇所に記述することはできません。