按下ESC键后Console.ReadKey()截断Console.WriteLine输出的问题
问题原因与解决方案
现象原因
Console.ReadKey()方法默认会回显用户按下的按键到控制台。ESC键属于控制字符(ASCII码27),它本身不可见,但控制台会为其预留一个输出位置。当后续执行Console.WriteLine("Escape pressed")时,输出的首字母'E'会被这个不可见的控制字符覆盖,最终显示出scape pressed的截断效果。
解决方案
有两种简单有效的解决方式:
方式一:禁用按键回显
调用Console.ReadKey()时传入true参数,该参数表示不回显按下的按键,避免控制字符占据输出位置:
Console.WriteLine("Enter key"); var key = Console.ReadKey(true); // 添加true参数禁用回显 if (key.Key == ConsoleKey.Escape) { Console.WriteLine("Escape pressed"); } else { Console.WriteLine("Escape Not Pressed"); }
方式二:先换行再输出
在ReadKey()之后先执行一次换行,让后续的输出内容在新的一行显示,避免和控制字符位置重叠:
Console.WriteLine("Enter key"); var key = Console.ReadKey(); Console.WriteLine(); // 先输出换行 if (key.Key == ConsoleKey.Escape) { Console.WriteLine("Escape pressed"); } else { Console.WriteLine("Escape Not Pressed"); }
内容的提问来源于stack exchange,提问作者Michał Turczyn
相关产品推荐
相关产品推荐

