系列: C++
cpp
263 行
· 更新于 2026-04-03
switch_case.cpp
C++/Part1_基礎入門/Ch03_控制流程/switch_case.cpp
// ============================================================
// Ch03 - switch / case 示範
// 編譯:g++ -std=c++17 -Wall -o switch_case switch_case.cpp
// 執行:./switch_case
// ============================================================
#include <iostream>
#include <string>
int main() {
// ══════════════════════════════════════════
// 1. 基本 switch(整數)
// ══════════════════════════════════════════
std::cout << "=== 基本 switch(星期判斷)===" << std::endl;
int day = 3;
std::cout << "day = " << day << " → ";
switch (day) {
case 1:
std::cout << "星期一" << std::endl;
break;
case 2:
std::cout << "星期二" << std::endl;
break;
case 3:
std::cout << "星期三" << std::endl;
break;
case 4:
std::cout << "星期四" << std::endl;
break;
case 5:
std::cout << "星期五" << std::endl;
break;
case 6:
std::cout << "星期六" << std::endl;
break;
case 7:
std::cout << "星期日" << std::endl;
break;
default:
std::cout << "無效的日期!(請輸入 1-7)" << std::endl;
break;
}
// ══════════════════════════════════════════
// 2. switch 搭配 char
// ══════════════════════════════════════════
std::cout << "\n=== switch 搭配 char ===" << std::endl;
char grade = 'B';
std::cout << "等第 '" << grade << "' → ";
switch (grade) {
case 'A':
std::cout << "90-100 分,優秀!" << std::endl;
break;
case 'B':
std::cout << "80-89 分,良好" << std::endl;
break;
case 'C':
std::cout << "70-79 分,普通" << std::endl;
break;
case 'D':
std::cout << "60-69 分,及格" << std::endl;
break;
case 'F':
std::cout << "60 分以下,不及格" << std::endl;
break;
default:
std::cout << "無效的等第" << std::endl;
break;
}
// ══════════════════════════════════════════
// 3. break 的重要性 — 穿透(Fall-through)
// ══════════════════════════════════════════
std::cout << "\n=== 穿透效果(忘記 break)===" << std::endl;
int num = 2;
std::cout << "num = " << num << ",不加 break 的結果:" << std::endl;
switch (num) {
case 1:
std::cout << " case 1" << std::endl;
// 沒有 break,會繼續執行下一個 case
case 2:
std::cout << " case 2" << std::endl;
// 沒有 break,繼續穿透
case 3:
std::cout << " case 3" << std::endl;
// 沒有 break,繼續穿透
case 4:
std::cout << " case 4" << std::endl;
break; // 在這裡才停止
case 5:
std::cout << " case 5(不會執行到這裡)" << std::endl;
break;
}
// ══════════════════════════════════════════
// 4. 故意穿透 — 多個 case 共用程式碼
// ══════════════════════════════════════════
std::cout << "\n=== 故意穿透(平日/假日判斷)===" << std::endl;
for (int d = 1; d <= 7; d++) {
std::cout << "day " << d << ":";
switch (d) {
case 1:
case 2:
case 3:
case 4:
case 5:
std::cout << "平日(上班/上課)" << std::endl;
break;
case 6:
case 7:
std::cout << "假日(休息)" << std::endl;
break;
}
}
// ══════════════════════════════════════════
// 5. 每月天數判斷(穿透應用)
// ══════════════════════════════════════════
std::cout << "\n=== 每月天數 ===" << std::endl;
int month = 2;
int year = 2024;
int days;
switch (month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
// 閏年判斷:能被 4 整除且不被 100 整除,或能被 400 整除
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days = 29;
} else {
days = 28;
}
break;
default:
days = -1; // 無效月份
break;
}
if (days > 0) {
std::cout << year << " 年 " << month << " 月有 " << days << " 天" << std::endl;
} else {
std::cout << "無效的月份:" << month << std::endl;
}
// ══════════════════════════════════════════
// 6. 簡易計算機
// ══════════════════════════════════════════
std::cout << "\n=== 簡易計算機 ===" << std::endl;
double num1 = 15.0, num2 = 4.0;
char op = '/';
std::cout << num1 << " " << op << " " << num2 << " = ";
switch (op) {
case '+':
std::cout << (num1 + num2) << std::endl;
break;
case '-':
std::cout << (num1 - num2) << std::endl;
break;
case '*':
std::cout << (num1 * num2) << std::endl;
break;
case '/':
if (num2 != 0) {
std::cout << (num1 / num2) << std::endl;
} else {
std::cout << "錯誤:除數不能為零!" << std::endl;
}
break;
case '%':
std::cout << static_cast<int>(num1) % static_cast<int>(num2) << std::endl;
break;
default:
std::cout << "不支援的運算子:'" << op << "'" << std::endl;
break;
}
// ══════════════════════════════════════════
// 7. 選單系統示範
// ══════════════════════════════════════════
std::cout << "\n=== 選單系統 ===" << std::endl;
std::cout << "┌────────────────────┐" << std::endl;
std::cout << "│ 餐廳點餐系統 │" << std::endl;
std::cout << "├────────────────────┤" << std::endl;
std::cout << "│ 1. 牛肉麵 $150 │" << std::endl;
std::cout << "│ 2. 雞排飯 $100 │" << std::endl;
std::cout << "│ 3. 炒飯 $80 │" << std::endl;
std::cout << "│ 4. 滷肉飯 $50 │" << std::endl;
std::cout << "│ 0. 離開 │" << std::endl;
std::cout << "└────────────────────┘" << std::endl;
int choice = 2; // 模擬使用者選擇
std::cout << "選擇:" << choice << std::endl;
std::string item;
int price = 0;
switch (choice) {
case 1:
item = "牛肉麵";
price = 150;
break;
case 2:
item = "雞排飯";
price = 100;
break;
case 3:
item = "炒飯";
price = 80;
break;
case 4:
item = "滷肉飯";
price = 50;
break;
case 0:
std::cout << "謝謝光臨,再見!" << std::endl;
return 0;
default:
std::cout << "無效的選項!" << std::endl;
return 1;
}
std::cout << "您點了:" << item << ",價格:$" << price << std::endl;
// ══════════════════════════════════════════
// 8. switch 的限制說明
// ══════════════════════════════════════════
std::cout << "\n=== switch 的限制 ===" << std::endl;
std::cout << "1. case 值必須是整數常數(int, char, enum)" << std::endl;
std::cout << "2. 不能使用 string、float、double 作為 case 值" << std::endl;
std::cout << "3. 不能使用變數作為 case 值(必須是編譯期常數)" << std::endl;
std::cout << "4. 每個 case 後面記得加 break(除非故意穿透)" << std::endl;
std::cout << "5. 建議加上 default 處理未預期的值" << std::endl;
// 如果需要比較 string,使用 if/else if 代替:
std::string color = "紅色";
if (color == "紅色") {
std::cout << "\nRed!" << std::endl;
} else if (color == "藍色") {
std::cout << "\nBlue!" << std::endl;
} else {
std::cout << "\n其他顏色" << std::endl;
}
return 0;
}
相关文章
C++
c
更新于 2026-07-21
deviceAlpha.h
deviceAlpha.h — c source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/deviceAlpha.h).
阅读文章 →
C++
c
更新于 2026-07-21
finalproject.c
finalproject.c — c source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/finalproject.c).
阅读文章 →
C++
cpp
更新于 2026-07-21
finalproject.cpp
finalproject.cpp — cpp source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/finalproject.cpp).
阅读文章 →
C++
c
更新于 2026-07-21
deviceAlpha.h
deviceAlpha.h — c source code from the C++ learning materials (C++/Mavis_Homework/Lab8/deviceAlpha.h).
阅读文章 →
C++
c
更新于 2026-07-21
lab8.c
lab8.c — c source code from the C++ learning materials (C++/Mavis_Homework/Lab8/lab8.c).
阅读文章 →
C++
cpp
更新于 2026-07-21
lab8.cpp
lab8.cpp — cpp source code from the C++ learning materials (C++/Mavis_Homework/Lab8/lab8.cpp).
阅读文章 →