首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# Console.Read() 讀取換行符導致 switch 默認分支循環三次的問題與修復

     編輯:程式設計綜合問答

現象代碼

char order = (char)Console.Read(); // 輸入 'e' + Enter
switch (order) { ... default: goto Order; }

輸入 'e' 後按 Enter,控制台連續打印三次「請重新輸入指令」才等待下一次輸入。

原因

Console.Read() 每次讀取一個字符(含換行符)。輸入流實為 'e'、'\r'、'\n' 三字符。第一次讀 'e' 進 default → goto;第二次讀 '\r' 進 default → goto;第三次讀 '\n' 進 default → goto;緩衝區空,第四次阻塞等待新輸入。

修復方案

// 方案 1:ReadLine 讀整行再取首字符
string line = Console.ReadLine();
if (line.Length > 0) order = char.ToLower(line[0]);

// 方案 2:ReadKey 直接獲取按鍵(不回顯需攔截)
var key = Console.ReadKey(true);
order = char.ToLower(key.KeyChar);

// 方案 3:循環跳過空白字符
int ch;
while ((ch = Console.Read()) != -1 && char.IsWhiteSpace((char)ch)) ;
if (ch != -1) order = (char)ch;

最佳實踐

交互式控制台菜單優先使用 Console.ReadLine() 配合 Trim()/ToLower(),簡單健壯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved