C の switch…case (C の Switch ステートメント) と例
C の Switch ステートメントとは
C の switch ステートメント 変数の値をテストし、それを複数のケースと比較します。ケースの一致が見つかると、その特定のケースに関連付けられたステートメントのブロックが実行されます。
スイッチのブロック内の各ケースには、識別子と呼ばれる異なる名前/番号があります。ユーザーによって提供された値は、一致が見つかるまで switch ブロック内のすべてのケースと比較されます。
ケースの一致が見つからない場合、デフォルトのステートメントが実行され、制御は switch ブロックから出ます。
このチュートリアルでは、次のことを学びます-
- C 言語の Switch ステートメントとは
- 大文字と小文字の構文の切り替え
- Switch ステートメントのフローチャート
- C での大文字と小文字の切り替えの例
- C のネストされたスイッチ
- Switch ケースが必要な理由は何ですか?
- switch ステートメントのルール
大文字と小文字の構文の切り替え
「C」プログラムで switch-case を実装する方法の一般的な構文は次のとおりです。
switch( expression ) { case value-1: Block-1; Break; case value-2: Block-2; Break; case value-n: Block-n; Break; default: Block-1; Break; } Statement-x;
- 式は整数式または文字式です。
- Value-1、2、n は、各ケースを個別に識別するために使用されるケース ラベルです。プログラムの実行中に問題が発生する可能性があるため、大文字と小文字のラベルを同じにしないでください。 「1」と同じラベルを持つ 2 つのケースがあるとします。次に、プログラムの実行中に、プログラムに 2 番目のケースを実行させたい場合でも、最初に表示されたケースが実行されます。これにより、プログラムに問題が生じ、目的の出力が得られません。
- 大文字と小文字のラベルは常にコロン ( :) で終わります。これらの各ケースはブロックに関連付けられています。
- ブロックとは、特定のケースのためにグループ化された複数のステートメントに他なりません。
- スイッチが実行されるたびに、テスト式の値が、スイッチ内で定義したすべてのケースと比較されます。テスト式に値 4 が含まれているとします。この値は、プログラム内でラベル 4 が見つかるまでのすべてのケースと比較されます。ケースが見つかるとすぐに、その特定のケースに関連付けられたステートメントのブロックが実行され、制御がスイッチの外に出ます。
- 各ケースの break キーワードは、特定のケースの終わりを示します。ケースごとにブレークを設定しないと、特定のケースが実行されても、C のスイッチは最後に到達するまですべてのケースを実行し続けます。これは起こらないはずです。したがって、それぞれの場合に常に break キーワードを入れる必要があります。 Break が実行されるとケースが終了し、コントロールはスイッチから外れます。
- デフォルトのケースはオプションです。 test-expression の値がスイッチ内のどのケースとも一致しない場合は常に、デフォルトが実行されます。それ以外の場合は、スイッチに default を記述する必要はありません。
- スイッチが実行されると、制御はステートメント x に移動し、プログラムの実行が続行されます。
Switch ステートメントのフローチャート
次の図は、switch ケースでケースがどのように選択されるかを示しています:

C での大文字と小文字の切り替えの例
次のプログラムは、スイッチの使用法を示しています:
#include <stdio.h> int main() { int num = 8; switch (num) { case 7: printf("Value is 7"); break; case 8: printf("Value is 8"); break; case 9: printf("Value is 9"); break; default: printf("Out of range"); break; } return 0; }
出力:
Value is 8
変数 num の値を変更してみて、出力の変化に注目してください。
たとえば、デフォルトの次のプログラムを考えてみます:
#include <stdio.h> int main() { int language = 10; switch (language) { case 1: printf("C#\n"); break; case 2: printf("C\n"); break; case 3: printf("C++\n"); break; default: printf("Other programming language\n");}}
出力:
Other programming language
C でスイッチ ケースを操作する場合、複数のケースを一意のラベルでグループ化します。 switch ステートメントの最後で分岐するには、それぞれの場合に break ステートメントを導入する必要があります。
オプションのデフォルトのケースは、他に一致がない場合に実行されます。
次の switch ステートメントを検討します:
#include <stdio.h> int main() { int number=5; switch (number) { case 1: case 2: case 3: printf("One, Two, or Three.\n"); break; case 4: case 5: case 6: printf("Four, Five, or Six.\n"); break; default: printf("Greater than Six.\n");}}
出力:
Four, Five, or Six.
C のネストされたスイッチ
C では、外側のスイッチに内側のスイッチを埋め込むことができます。また、内部スイッチと外部スイッチのケース定数は、共通の値を持ち、競合することはありません。
ユーザーが自分の ID を入力する次のプログラムを検討します。ID が有効な場合、パスワードを入力するように求められます。パスワードが正しい場合、プログラムはユーザーの名前を出力します。そうでない場合、プログラムは正しくないと出力します。パスワード。ID が存在しない場合、プログラムは間違った ID を出力します
#include <stdio.h> int main() { int ID = 500; int password = 000; printf("Plese Enter Your ID:\n "); scanf("%d", & ID); switch (ID) { case 500: printf("Enter your password:\n "); scanf("%d", & password); switch (password) { case 000: printf("Welcome Dear Programmer\n"); break; default: printf("incorrect password"); break; } break; default: printf("incorrect ID"); break; } }
出力:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
Switch ケースが必要な理由
if-else ステートメントには、代替パスの数が増えるたびにプログラムの複雑さが増すという潜在的な問題が 1 つあります。プログラムで複数の if-else 構文を使用すると、プログラムが読みにくく、理解しにくくなる可能性があります。場合によっては、プログラムを書いた開発者を混乱させることさえあります.
この問題の解決策は、switch ステートメントです。
switch ステートメントのルール
- 式は常に結果に対して実行される必要があります。
- 大文字と小文字のラベルは定数で一意である必要があります。
- 大文字と小文字のラベルはコロン ( :) で終わる必要があります。
- それぞれの場合に break キーワードが存在する必要があります。
- デフォルト ラベルは 1 つだけです。
- 複数の switch ステートメントをネストできます。
まとめ
- スイッチは「C」の意思決定構造です。
- 複数の決定が関係するプログラムでスイッチが使用されています。
- スイッチには、実行可能なテスト式が含まれている必要があります。
- 各ケースにはブレーク キーワードを含める必要があります。
- 大文字と小文字のラベルは定数で一意でなければなりません。
- デフォルトはオプションです。
- 複数の switch ステートメントを互いに入れ子にすることができます。
C言語