C++のswitch文を完全攻略!多分岐処理とbreakの役割を徹底解説
生徒
「先生、選択肢が5個も10個もあるとき、if文をたくさん書くのは大変じゃないですか?」
先生
「そんな時に便利なのが『switch文(スイッチぶん)』です。特定の値に応じて処理をパッと切り替えることができるんですよ。」
生徒
「切り替えスイッチみたいで分かりやすそうですね!どうやって使うんですか?」
先生
「基本の書き方から、重要な『break(ブレイク)』の役割まで、初心者の方にも分かりやすく説明しますね!」
1. switch文とは?たくさんの分岐をスッキリ整理
C++のswitch文は、ある変数の値を見て、その値に一致する場所に処理をジャンプさせるための構文です。if文でも同じことはできますが、選択肢が非常に多い場合、switch文を使ったほうがプログラムが見やすく、スッキリと整理されます。
プログラミング未経験の方には、「エレベーターのボタン」をイメージしていただくと分かりやすいでしょう。押したボタンの階数(値)に応じて、目的のフロア(処理)へ直行する仕組みです。この「値によって行き先を決める」という考え方は、メニュー画面の選択やゲームの進行管理など、多くの場面で使われています。
2. switch文の基本構文!caseとdefaultを覚えよう
switch文を書くときは、まず switch(変数) と書き、その後に波括弧 {} を用意します。その中に、値ごとの行き先として case 値: (ケース)を並べていきます。また、どの値にも当てはまらなかった時のために default: (デフォルト)という予備の行き先も用意するのが一般的です。
「case」は日本語で「〜の場合」という意味です。例えば「case 1:」なら「値が1の場合」という意味になります。最後の「default」は「それ以外の場合」という意味で、想定外の数字が入ってきた時のガード役として機能します。これにより、プログラムが迷子になるのを防ぐことができます。
int num = 2;
switch (num) {
case 1:
std::cout << "1が選ばれました" << std::endl;
break;
case 2:
std::cout << "2が選ばれました" << std::endl;
break;
default:
std::cout << "それ以外です" << std::endl;
break;
}
2が選ばれました
3. 超重要!break(ブレイク)がないとどうなる?
switch文で最も注意が必要なのが break; (ブレイク)という命令です。これは「ここで処理を終えて、switch文の外に出る」という合図です。もしこれを書き忘れると、コンピューターは次の case の中身まで勝手に実行してしまいます。これを「フォールスルー」と呼びます。
パソコンを触ったことがない方に例えるなら、電車の駅で降りるのを忘れて、そのまま次の駅まで運ばれてしまうような状態です。自分の降りたい駅(case)に着いたら、必ずドアを開けて外に出る(break)必要があります。特別な理由がない限り、各 case の終わりには必ず break; を書くのがC++の鉄則です。
int color = 1; // 1は「赤」とする
switch (color) {
case 1:
std::cout << "止まれ!" << std::endl;
// もしここにbreakがないと...
case 2:
std::cout << "進め!" << std::endl;
break;
}
止まれ!
進め!
このように、赤信号なのに「進め!」まで表示されてしまう大事故が起きてしまいます。break の重要性がよく分かりますね。
4. switch文で使えるデータ型と使えないデータ型
実は、switch文は何でも判定できるわけではありません。C++のルールでは、判定に使えるのは「整数(int)」や「文字(char)」など、キリのいい値だけです。そのため、小数(floatやdouble)や、長い文章(string)を直接 case に並べることはできません。
「文章を判定したいときはどうするの?」と思うかもしれませんが、その場合は if 文を使うか、文章に番号を割り振ってから switch文に渡すといった工夫をします。このように、目的によって「if文」と「switch文」を使い分けるのが、スマートなプログラミングのコツです。初心者の方はまず「整数や文字ならswitch文が使える」と覚えておきましょう。
5. 複数のケースをまとめるテクニック
あえて break を書かないことで、複数の case で同じ処理をさせるテクニックもあります。例えば、入力された数字が「1でも2でも3でも当たり!」というような場合です。
やり方は簡単で、case を縦に並べて最後に一つだけ処理と break を書くだけです。これを知っておくと、同じコードを何度も書く手間が省け、ミスも減らすことができます。パソコンのキーボードで文字を打つ量を減らせるのは、プログラマにとって嬉しいことなのです。
int month = 8;
switch (month) {
case 7:
case 8:
case 9:
std::cout << "夏休み期間です!" << std::endl;
break;
default:
std::cout << "通常授業です。" << std::endl;
break;
}
夏休み期間です!
6. 文字(char)を使ったメニュー選択の例
switch文は数字だけでなく、アルファベット一文字などの「文字」も判定できます。ゲームの操作(Aボタンで攻撃、Bボタンで防御など)を作る際によく使われる手法です。文字を扱うときは、シングルクォーテーション ' ' で囲むのがルールです。
「文字」と「文字列(文章)」の違いは、パソコン初心者の方が最初につまずきやすいポイントですが、「文字は一文字だけ、文字列は二文字以上の並び」と考えるとスッキリします。switch文はこの「一文字だけ」を扱うのが大得意です。自分だけのメニュー画面を作ってみると、プログラミングがどんどん楽しくなりますよ。
char command = 'A';
switch (command) {
case 'A':
std::cout << "攻撃を開始します!" << std::endl;
break;
case 'B':
std::cout << "身を固めて防御しました。" << std::endl;
break;
default:
std::cout << "コマンドが正しくありません。" << std::endl;
break;
}
攻撃を開始します!
7. defaultの重要性!「もしも」に備える安心設計
プログラムを作っていると、予想外の入力が来ることがあります。例えば、1から3まで選ぶメニューで「99」と入力された場合などです。そんな時に default: が設定されていないと、プログラムは何の反応もしなくなり、使う人は「壊れたのかな?」と不安になってしまいます。
どんなに単純なプログラムでも、default を用意して「その入力は受け付けられません」と教えてあげるのは、使う人への優しさ(ユーザーフレンドリー)です。このような細かい配慮ができるようになると、初心者から一歩抜け出した、信頼されるプログラマに近づくことができます。
8. if文とswitch文、どっちを使うのが正解?
最後に、誰もが迷う「使い分け」についてです。基準はシンプルに考えましょう。条件が「10点より大きいか」「AかつBか」のように複雑な範囲や組み合わせなら if 文、値が「1のとき」「2のとき」とはっきり決まっているなら switch 文が適しています。
もし迷ったら、最初は if 文で書いてみても構いません。後から「あ、これ switch文に書き換えたほうが読みやすいな」と気づくことが大切です。パソコン操作と同じで、プログラミングも何度も触っているうちに、自然と使い分けの感覚が身についていきます。まずは恐れずに、いろいろな書き方を試してみることが一番の上達法です。
9. switch文をマスターしてコードを綺麗に保とう
switch文を使いこなせるようになると、コードの見た目が劇的に整います。整理されたコードは、間違いを見つけやすく、後で修正するのも簡単です。今回学んだ「caseのルール」と「breakの役割」を忘れずに、あなたのプログラムに組み込んでみてください。
プログラミング未経験の方は、まず自分の身の回りにある「選択肢」を switch文で表現できないか考えてみるのがおすすめです。自動販売機のボタン、曜日の判定、占いの結果……アイデア次第で、switch文はあなたのプログラムをより豊かなものに変えてくれます。焦らず一歩ずつ、楽しみながらC++の世界を冒険していきましょう!