C# Console.ReadLine()每次按键换行 输入逐字符重复显示问题
问题原因
你遇到的输入字符重复显示问题是由Console.ReadKey()的默认特性导致的:
无参的Console.ReadKey()方法默认不会拦截按键输入,你按下的选择键会被直接回显到控制台,同时会修改控制台的输入模式,干扰后续Console.ReadLine()的回显逻辑,最终出现每个输入字符重复打印的现象。
解决方案
按以下优先级修改代码即可解决:
- 替换Main方法中的无参
Console.ReadKey()调用,使用带拦截参数的重载:
// 原代码 ConsoleKeyInfo keyPressed = Console.ReadKey(); // 修改为 ConsoleKeyInfo keyPressed = Console.ReadKey(true);
传入true参数表示拦截用户按下的按键,不将其回显到控制台,也不会打乱后续的行输入模式。
- 如果修改后仍存在问题,可以在调用
Console.ReadLine()之前手动清空残留的输入缓冲区,避免冗余输入干扰:
static void EnterCharacterName() { String characterName; do { Console.Write("Podaj nazwę bohatera:"); // 清空输入缓冲区残留内容 while (Console.KeyAvailable) { Console.ReadKey(true); } characterName = Console.ReadLine(); } while (!IsCharacterNameValid(characterName)); }
- 若以上修改都无效,可验证是否为IDE调试控制台的兼容问题:直接在系统自带的cmd/PowerShell中运行编译后的exe文件,如果运行正常则说明是IDE内置控制台的bug,不影响最终发布的程序使用,升级IDE版本即可解决兼容问题。
内容的提问来源于stack exchange,提问作者jasiu
相关产品推荐
相关产品推荐

