C#栈操作控制台程序输入字符重复显示问题排查
解决C#控制台程序输入字符重复显示的问题
嘿,我来帮你搞定这个问题!你遇到的输入字符重复显示的情况,和Console.WriteLine没关系,根源出在Console.ReadKey()的默认行为上。
问题成因
Console.ReadKey()方法默认会开启字符回显功能——也就是说,当你按下一个按键时,系统会自动把这个按键对应的字符打印到控制台里。你的代码里直接用了Console.ReadKey().KeyChar,没有关闭这个回显,所以你按下的字符会被自动显示一次,看起来就像是“重复”了。比如你按'A',控制台先回显一个'A',后续程序如果没有额外处理,就会出现你看到的重复效果。
快速解决方案
解决这个问题超简单,只需要给Console.ReadKey()传一个true参数就行。这个参数叫intercept,设置为true就会阻止系统自动回显你输入的字符:
char act = Console.ReadKey(true).KeyChar;
替换掉你原来的那行代码,再运行程序,输入字符就不会重复显示了。
额外优化建议
另外,你的代码里用goto来实现循环逻辑,虽然能跑起来,但在C#里更推荐用do-while或者while循环,这样代码可读性会好很多。比如可以改成这样:
Stack st = new Stack(); Console.WriteLine("Add item to Stack"); int inp = Convert.ToInt32(Console.ReadLine()); st.Push(inp); do { Console.WriteLine("\nA to Add"); Console.WriteLine("D to Pop"); Console.WriteLine("V to View"); char act = Console.ReadKey(true).KeyChar; switch (act) { case 'A': Add(st); break; case 'D': Remove(st); break; case 'V': View(st); break; default: Console.WriteLine("\nNot a valid option"); break; } } while (true); // 你也可以加个退出条件,比如按'Q'就结束程序
这样代码结构更清晰,后续维护也更方便。
内容的提问来源于stack exchange,提问作者szmonoloza
相关产品推荐
相关产品推荐

