Console.WriteLine("你是否要繼續查看?yes/no");
if (Console.ReadLine() == "yes")
{
Console.WriteLine("請查看相關內容。");
}
else if (Console.ReadLine() == "no") // ❌ 第二次呼叫會再等待輸入
{
Console.WriteLine("你放棄查看相關內容。程序退出。");
}
現象:輸入一次 "no" 無反應,第二次輸入 "no" 才進入分支。
Console.ReadLine() 會**阻塞並消耗**一行標準輸入。if 條件判斷時已呼叫一次,若輸入 "no",條件為 false。else if 再次呼叫 Console.ReadLine(),**等待下一行輸入**,導致使用者以為程式卡住。Console.WriteLine("你是否要繼續查看?yes/no");
string input = Console.ReadLine(); // ✅ 僅讀取一次
if (input == "yes")
{
Console.WriteLine("請查看相關內容。");
}
else if (input == "no")
{
Console.WriteLine("你放棄查看相關內容。程序退出。");
}
else
{
Console.WriteLine("輸入無效,預設退出。");
}
string input;
do
{
Console.Write("請輸入 yes/no: ");
input = Console.ReadLine()?.Trim().ToLower();
} while (input != "yes" && input != "no");
// 後續邏輯...
若需即時單鍵響應 (無需 Enter),可用:
ConsoleKeyInfo key = Console.ReadKey(intercept: true); // 不回顯
if (key.Key == ConsoleKey.Y) { /* yes */ }
else if (key.Key == ConsoleKey.N) { /* no */ }
每次呼叫 Console.ReadLine() 都會消耗一行輸入**。條件判斷中務必「一次讀取、多次比較」,避免邏輯與輸入流脫節。此原理同樣適用於 Scanner.nextLine() (Java)、input() (Python) 等阻塞式讀取 API。