如何检测CTRL+Z组合按键?C#控制台程序作业问题排查
解决Ctrl+Z组合键检测问题及代码修正
你的代码核心问题是仅判断了Z键,未同时验证Control修饰键,且忽略了Console.ReadLine()在用户按下Ctrl+Z时会返回null的特性,结合这两点就能实现正确的终止逻辑。
修正后的代码如下:
Console.Write("Enter a string: "); string input = Console.ReadLine(); // 处理用户直接按Ctrl+Z的初始情况 if (input == null) { Console.WriteLine("No strings entered."); return; } string longest = input; string shortest = input; ConsoleKeyInfo ki; do { Console.Write("Enter another string: "); input = Console.ReadLine(); // 输入为null说明按下了Ctrl+Z,直接终止循环 if (input == null) break; if (input.Length > longest.Length) longest = input; if (input.Length < shortest.Length) shortest = input; Console.WriteLine("Press enter to continue or <CTRL> + Z to exit"); ki = Console.ReadKey(true); // 同时检测Ctrl和Z键的组合 } while (!((ki.Modifiers & ConsoleModifiers.Control) != 0 && ki.Key == ConsoleKey.Z)); Console.WriteLine("Longest string: " + longest); Console.WriteLine("Shortest string: " + shortest); Console.ReadLine();
关键修正说明:
- 新增
input == null判断:用户在输入字符串时按下Ctrl+Z,Console.ReadLine()会返回null,此时直接终止循环 - 组合键判断逻辑:
(ki.Modifiers & ConsoleModifiers.Control) != 0 && ki.Key == ConsoleKey.Z,确保只有同时按下Ctrl和Z才触发退出 - 优化变量命名为
longest和shortest,提升代码可读性 - 处理初始输入就按Ctrl+Z的边界场景,避免空引用异常
内容的提问来源于stack exchange,提问作者danytb8
相关产品推荐
相关产品推荐

