C# do-while循环中结合ConsoleKey实现switch按键选择时的异常问题
问题根因
- 按键读取方法
Console.ReadKey()放置在do-while循环外部,程序仅会在启动时捕获一次按键输入,循环运行过程中不会再读取新的按键操作,会触发死循环或无法响应后续按键的异常。 - 控制台输出提示与实际匹配的按键不符:提示要求选择1-2,但实际switch分支判断的是
ConsoleKey.X和ConsoleKey.Y,会导致用户操作预期错位。
修复方案
将按键读取逻辑移入循环内部,同时修正提示文本,修复后的代码如下:
static void Main(string[] args) { Console.WriteLine("Attention"); Console.WriteLine("按下X执行动作1,按下Y执行动作2,按下ESC退出"); ConsoleKey inputKey; do { // intercept: true 表示按下的字符不显示在控制台中,可根据需要调整为false var inputData = Console.ReadKey(intercept: true); inputKey = inputData.Key; switch (inputKey) { case ConsoleKey.X: Console.WriteLine("action 1"); break; case ConsoleKey.Y: Console.WriteLine("action 2"); break; case ConsoleKey.Escape: Console.WriteLine("即将退出程序"); break; default: Console.WriteLine("Default"); break; } } while (inputKey != ConsoleKey.Escape); }
修复后每次循环都会优先读取用户最新按下的按键,再执行对应的switch分支,按下ESC键时自动退出循环。
内容的提问来源于stack exchange,提问作者BegCodde
相关产品推荐
相关产品推荐

