You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:51:15