C言語 Switch文の使い方

この記事のポイント

  • C言語におけるSwitch文の概要
  • Switch文を使った複数条件分岐の効率的処理
  • Switch文とif-else文の違いや使い分け
  • Switch文におけるbreakステートメントの重要性     
  • Switch文を使った条件分岐の実用パターン    

目次

C言語のSwitch文とは?

C言語のSwitch文は、複数の条件分岐を効率的に処理するための制御構文です。Switch文を使うと、単一の変数や式の値に基づき、プログラムの流れを複数の経路に分岐させることができます。

Switch文は、条件分岐の制御構文であるif-elseと比べられることが多いです。Switch文を使うと、if-elseを連続させるよりもコードの可読性が高まります。特に分岐が多い場合は、Switch文を使ったほうがプログラムの実行効率が向上しやすくなるかもしれません。

Switch文の動作原理は単純です。

指定された式(通常は整数型または文字型)の値を評価し、その値と一致するcase節に処理を移します。各case節では処理内容を記述し、通常はbreak文で終了します。どのcase節にも一致しない場合は、default節(設定されている場合)に処理が移る流れです。     

Switch文の関連で初心者プログラマーが躓きやすいポイントに、break文の扱いがあります。各case節の最後にbreak文を書かなければ、次のcase節に「落下(fall through)」してしまいます。この場合、意図しない動作を引き起こす可能性があるでしょう。ただし、C言語のプログラミングでは、break文の特性を意図的に利用する場合もあります。

Switch文の使用が適しているのは、メニュー選択、コマンド処理、状態遷移といった明確に区分された複数の選択肢から一つを選ぶケースです。ただし、浮動小数点数や文字列による分岐には、直接対応していない注意点もあります。

【関連】
C言語をもっと詳しく学ぶならpaizaラーニング

基本構文

C言語におけるSwitch文の基本構文は、以下のとおりです。以下のコード例では、式の値に応じて対応するcase節に処理が移るようになっています。

#include <stdio.h> int main(void) { int animal_code = 2; switch (animal_code) { case 1: printf("イヌ\n"); break; case 2: printf("ネコ\n"); break; case 3: printf("ウサギ\n"); break; default: printf("不明な動物\n"); } return 0; }

出力結果:

ネコ

実用例

Switch文は、さまざまな状況で活用できる便利な制御構文です。

このセクションでは、実際のプログラミングで頻繁に使われるパターンを紹介します。特に、各caseの処理内容や複数のcaseをグループ化する方法、breakの省略による処理の連続実行など、Switch文のさまざまな特性を活かした実装例を見ていきましょう。

これらの実装例を確認すると、Switch文の柔軟性と実用性の高さも実感できるはずです。

初心者の方は、コード例を参考にしながら自分のプログラム内で応用してみてください。コードを書き換えたり拡張したりしながら実験することで、Switch文の使い方がより深く理解できるでしょう。

また、各例のコードは、簡潔さに保ちつつ実用的な機能を実現しています。実際のプロジェクトでも大いに応用できるはずです。それでは、具体的なコード例を通じて、Switch文の実用的な使い方を見ていきましょう。

曜日別メッセージ表示

曜日別メッセージ表示は、週の各日に応じて異なる挨拶や情報を表示したい場合に便利なコード例です。このコードを使うと、曜日を数値で表現し各曜日に特定の動物の行動を関連付けることで、ユーザーに親しみやすいメッセージを提供できます。この条件分岐のパターンは、カレンダーアプリやスケジュール管理ツールでよく使われます。

#include <stdio.h> int main(void) { int day = 3; // 1=月曜、2=火曜、...、7=日曜 switch (day) { case 1: printf("月曜: クマが休んでいます\n"); break; case 2: printf("火曜: キツネが遊んでいます\n"); break; case 3: printf("水曜: カエルが泳いでいます\n"); break; default: printf("週末: 動物たちが休んでいます\n"); } return 0; }

出力結果:

水曜: カエルが泳いでいます

動物の鳴き声出力

動物の鳴き声出力プログラムは、文字値による分岐を理解しやすいコード例です。以下では単一の文字コードを使い、さまざまな動物の鳴き声を適切に表現できます。このようなパターンは、教育用アプリや子供向けゲームで見かけることがあるでしょう。新しい動物を簡単に追加できる、拡張性の高いパターンでもあります。

#include <stdio.h> int main(void) { char animal = 'C'; // D=イヌ, C=ネコ, B=トリ, F=カエル switch (animal) { case 'D': printf("イヌ: ワンワン\n"); break; case 'C': printf("ネコ: ニャーニャー\n"); break; case 'B': printf("トリ: チュンチュン\n"); break; default: printf("不明な動物\n"); } return 0; }

出力結果:

ネコ: ニャーニャー

成績評価システム

成績評価システムでは、点数の範囲に応じて成績を判定します。このコード例のポイントは、Switch文とcase文のグループ化を使うことで、点数帯ごとに適切な評価を割り当てられる点です。教育アプリや学習管理システムでよく使われており、評価基準の変更も容易に行える利点があります。

#include <stdio.h> int main(void) { int score = 85; char grade; switch (score / 10) { case 10: case 9: grade = 'A'; break; // 90-100点 case 8: grade = 'B'; break; // 80-89点 case 7: grade = 'C'; break; // 70-79点 default: grade = 'F'; // 0-69点 } printf("点数: %d, 評価: %c\n", score, grade); return 0; }

出力結果:

点数: 85, 評価: B

季節判定プログラム

季節判定プログラムは、月の数値から季節を特定するコード例です。複数のcaseをグループ化することで、各季節に含まれる月を効率的に処理できます。このコードパターンは、カレンダーアプリや季節性コンテンツを扱うシステムでよく使われています。地域ごとの季節定義も簡単に調整可能です。

#include <stdio.h> int main(void) { int month = 7; printf("%d月の季節: ", month); switch (month) { case 3: case 4: case 5: printf("春(チョウが飛んでいます)\n"); break; case 6: case 7: case 8: printf("夏(セミが鳴いています)\n"); break; case 9: case 10: case 11: printf("秋(リスが木の実を集めています)\n"); break; default: printf("冬(クマが冬眠しています)\n"); } return 0; }

出力結果:

7月の季節: 夏(セミが鳴いています)

メニュー選択システム

メニュー選択システムは、対話型アプリケーションのユーザーインターフェースでよく使われるSwitch文の典型例です。ユーザーの選択に応じて異なる機能を実行することで、対話型アプリケーションの基本構造を作成できます。このコード例は新しいメニュー項目の追加も容易であり、拡張性も高いです。

#include <stdio.h> int main(void) { int choice = 2; printf("選択: %d\n", choice); switch (choice) { case 1: printf("シカの情報を表示しました\n"); break; case 2: printf("キリンのデータを入力しました\n"); break; case 3: printf("プログラムを終了します\n"); break; default: printf("無効な選択です\n"); } return 0; }

出力結果:

選択: 2
キリンのデータを入力しました

エラーコード解析

エラーコード解析は、システム開発でよく使われるコードパターンです。数値エラーコードに対応する詳しいメッセージを提供することで、ユーザーやプログラマーのデバッグ作業を支援します。Webアプリケーションやネットワークプログラミングなどの際に、特に重要な役割を果たすコードパターンでしょう。

#include <stdio.h> int main(void) { int error_code = 404; printf("エラーコード %d: ", error_code); switch (error_code) { case 200: printf("成功(ハクチョウが泳いでいます)\n"); break; case 404: printf("見つかりません(キツネが探しています)\n"); break; case 500: printf("サーバーエラー(ゾウが転びました)\n"); break; default: printf("未知のエラー(パンダが考え中)\n"); } return 0; }

出力結果:

エラーコード 404: 見つかりません(キツネが探しています)

ステータスコード処理

ステータスコード処理は、プログラムの状態管理をする際に有用なコードパターンです。各状態に対応する処理をしっかり分離することで、状態遷移の管理が容易になります。ステータスコード処理は、ゲーム開発やプロセス制御といった状態変化を扱うアプリケーションでよく使われるものでしょう。

#include <stdio.h> int main(void) { int status = 2; printf("システムステータス: "); switch (status) { case 0: printf("待機中(コアラがユーカリを食べています)\n"); break; case 1: printf("実行中(チーターが走っています)\n"); break; case 2: printf("一時停止(カメがゆっくり歩いています)\n"); break; default: printf("不明(モグラが迷子になっています)\n"); } return 0; }

出力結果:

システムステータス: 一時停止(カメがゆっくり歩いています)

まとめ

C言語のSwitch文は、複数の条件分岐を効率的に処理するための強力ツールです。複数の条件分岐でSwitch文を使うと、if-else文を連鎖する場合と比べて、コードの可読性が向上しやすくなります。選択肢が多い場面では、Switch文の有効性が特に高まりやすいでしょう。

Switch文の基本構文は、とてもシンプルです。Switch文とあわせてcaseのグループ化やbreak文の適切な使用をすることで、複雑な分岐ロジックも簡潔に実装できます。この記事で紹介した実用パターンを参考にしながら、ぜひとも自分のプログラムに応用してみてください。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. C言語のリファレンス記事一覧
  4. C言語 Switch文の使い方