☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
C# 基礎 初學

🔀 控制流程

📌 什麼是控制流程?

程式預設是從上到下一行一行執行。控制流程讓你可以:

  • 做選擇(如果...就...否則...)
  • 重複執行(迴圈)
  • 跳過或中斷(break、continue)

📌 if / else if / else 條件判斷

int score = 85;  // 學生的成績

// if 是最基本的條件判斷
if (score >= 90) // 如果成績大於等於 90
{
    Console.WriteLine("優秀!");  // 印出「優秀!」
}
else if (score >= 80) // 否則如果成績大於等於 80
{
    Console.WriteLine("良好!");  // 印出「良好!」
}
else if (score >= 60) // 否則如果成績大於等於 60
{
    Console.WriteLine("及格");    // 印出「及格」
}
else // 以上條件都不符合時
{
    Console.WriteLine("不及格");  // 印出「不及格」
}
// 輸出:良好!(因為 85 >= 80)

// 巢狀 if(if 裡面再放 if)
int age = 20;          // 年齡
bool hasMoney = true;  // 有沒有錢

if (age >= 18) // 先判斷是否成年
{
    if (hasMoney) // 再判斷有沒有錢
    {
        Console.WriteLine("可以買東西"); // 成年且有錢
    }
    else
    {
        Console.WriteLine("成年但沒錢"); // 成年但沒錢
    }
}

// 更簡潔的寫法:用 && 合併條件
if (age >= 18 && hasMoney) // 成年「且」有錢
{
    Console.WriteLine("可以買東西");
}

📌 switch 表達式(C# 8+)

// 傳統 switch 語句
int dayNumber = 3;  // 星期幾(1-7)

switch (dayNumber) // 根據 dayNumber 的值來判斷
{
    case 1:                             // 如果是 1
        Console.WriteLine("星期一");  // 印出「星期一」
        break;                          // break 表示結束這個 case
    case 2:                             // 如果是 2
        Console.WriteLine("星期二");
        break;
    case 3:                             // 如果是 3
        Console.WriteLine("星期三");
        break;
    case 6:                             // 如果是 6
    case 7:                             // 或 7(可以合併多個 case)
        Console.WriteLine("週末");
        break;
    default:                            // 以上都不是
        Console.WriteLine("其他");
        break;
}

// C# 8+ switch 表達式(更簡潔的寫法)
string dayName = dayNumber switch  // 根據 dayNumber 回傳對應的字串
{
    1 => "星期一",    // 如果是 1,回傳「星期一」
    2 => "星期二",    // 如果是 2,回傳「星期二」
    3 => "星期三",    // 如果是 3,回傳「星期三」
    4 => "星期四",
    5 => "星期五",
    6 or 7 => "週末", // 6 或 7 都回傳「週末」
    _ => "無效"       // _ 是預設值(等同 default)
};

Console.WriteLine(dayName); // 輸出:星期三

// 模式匹配(Pattern Matching)— 更進階的 switch
int temperature = 35;  // 氣溫

string weather = temperature switch
{
    <= 0 => "結冰了!",          // 小於等於 0 度
    > 0 and <= 15 => "很冷",    // 0 到 15 度
    > 15 and <= 25 => "舒適",   // 15 到 25 度
    > 25 and <= 35 => "很熱",   // 25 到 35 度
    > 35 => "超級熱!",         // 超過 35 度
};
Console.WriteLine($"氣溫 {temperature}°C:{weather}"); // 輸出:氣溫 35°C:很熱

📌 for 迴圈

// for 迴圈:當你知道要重複幾次時使用
// for (初始值; 條件; 更新) { 要重複的程式碼 }

for (int i = 0; i < 5; i++)  // i 從 0 開始,每次 +1,到 5 停止
{
    Console.WriteLine($"第 {i} 次");  // 印出目前是第幾次
}
// 輸出:第 0 次、第 1 次、第 2 次、第 3 次、第 4 次

// 倒數迴圈
for (int i = 10; i >= 1; i--)  // i 從 10 開始,每次 -1,到 1 停止
{
    Console.WriteLine($"倒數:{i}"); // 印出倒數
}

// 九九乘法表(巢狀迴圈)
for (int i = 1; i <= 9; i++)       // 外層:被乘數 1-9
{
    for (int j = 1; j <= 9; j++)   // 內層:乘數 1-9
    {
        // \t 是 Tab 字元,用來對齊
        Console.Write($"{i}x{j}={i * j}\t"); // 印出乘法結果
    }
    Console.WriteLine(); // 每一列結束後換行
}

📌 foreach 迴圈

// foreach 用來走訪集合中的每一個元素
string[] fruits = { "蘋果", "香蕉", "橘子", "芒果" }; // 水果陣列

foreach (string fruit in fruits) // 依序取出每個水果
{
    Console.WriteLine($"我喜歡吃 {fruit}"); // 印出每個水果
}
// 輸出:我喜歡吃 蘋果、我喜歡吃 香蕉、...

// foreach 也可以用 var
foreach (var fruit in fruits) // 讓編譯器自動推斷型別
{
    Console.WriteLine(fruit); // 印出水果名稱
}

// 走訪字串中的每個字元
string word = "Hello";  // 一個英文字串
foreach (char c in word)  // 字串是字元的集合
{
    Console.Write($"{c} "); // 印出每個字元
}
// 輸出:H e l l o

📌 while 與 do-while 迴圈

// while 迴圈:先判斷條件,再執行
int count = 0;           // 計數器從 0 開始

while (count < 3)        // 當 count 小於 3 時持續執行
{
    Console.WriteLine($"count = {count}"); // 印出目前的 count
    count++;             // count 加 1(很重要!否則會無窮迴圈)
}
// 輸出:count = 0、count = 1、count = 2

// do-while 迴圈:先執行一次,再判斷條件
string? input;           // 使用者輸入的字串

do
{
    Console.Write("請輸入 'exit' 離開:");  // 提示使用者
    input = Console.ReadLine();              // 讀取輸入
} while (input != "exit");                 // 當輸入不是 exit 時繼續
// do-while 保證至少執行一次

Console.WriteLine("程式結束");  // 使用者輸入 exit 後到這裡

📌 break、continue、return

// break — 立刻跳出迴圈
for (int i = 0; i < 10; i++) // 預計跑 10 次
{
    if (i == 5)              // 但當 i 等於 5 時
    {
        break;               // 立刻停止迴圈
    }
    Console.WriteLine(i);    // 只會印出 0, 1, 2, 3, 4
}

// continue — 跳過這次,繼續下一次
for (int i = 0; i < 10; i++) // 跑 10 次
{
    if (i % 2 == 0)          // 如果 i 是偶數
    {
        continue;            // 跳過這次迴圈
    }
    Console.WriteLine(i);    // 只會印出 1, 3, 5, 7, 9(奇數)
}

// return — 結束整個方法
// return 會在「方法與函式」章節詳細說明

📌 三元運算子 ? :

// 三元運算子是 if/else 的簡化寫法
// 語法:條件 ? 條件為 true 時的值 : 條件為 false 時的值

int age = 20;  // 年齡

// 傳統 if/else 寫法
string status;
if (age >= 18)
{
    status = "成年";
}
else
{
    status = "未成年";
}

// 三元運算子寫法(一行搞定!)
string status2 = age >= 18 ? "成年" : "未成年";  // 條件成立回傳「成年」
Console.WriteLine(status2); // 輸出:成年

// 也可以直接在 Console.WriteLine 中使用
int score = 75; // 分數
Console.WriteLine(score >= 60 ? "及格 ✅" : "不及格 ❌");
// 輸出:及格 ✅

// ⚠️ 不要過度使用三元運算子
// 巢狀的三元運算子很難讀懂:
// string result = a > b ? (a > c ? "a最大" : "c最大") : (b > c ? "b最大" : "c最大");
// 建議複雜條件還是用 if/else 或 switch

🤔 我這樣寫為什麼會錯?

❌ 錯誤:忘記 break 導致穿透

// ❌ 錯誤:C# 的 switch 每個 case 都需要 break
switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        // 忘記 break → 編譯錯誤!(C# 不允許隱式穿透)
    case 2:
        Console.WriteLine("星期二");
        break;
}

// ✅ 正確:每個 case 都要有 break(或 return)
switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;  // 記得加 break
    case 2:
        Console.WriteLine("星期二");
        break;
}

❌ 錯誤:無窮迴圈

// ❌ 錯誤:忘記更新計數器
int i = 0;
while (i < 5)
{
    Console.WriteLine(i);
    // 忘記 i++,i 永遠是 0,迴圈永遠不會停!
}

// ✅ 正確:
int j = 0;
while (j < 5)
{
    Console.WriteLine(j);
    j++;  // 記得更新計數器!
}

❌ 錯誤:在 foreach 中修改集合

var list = new List<int> { 1, 2, 3, 4, 5 }; // 建立一個 List

// ❌ 錯誤:不能在 foreach 中修改正在走訪的集合
// foreach (var item in list)
// {
//     if (item == 3) list.Remove(item); // 會拋出 InvalidOperationException
// }

// ✅ 正確:用 RemoveAll 或先轉成新的集合
list.RemoveAll(x => x == 3);  // 移除所有等於 3 的元素

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊