You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:按下回车键重置24小时制时钟功能无法正常实现

问题分析与修复方案

嘿,我一眼就瞅出问题所在了!你的时钟重置功能失效,核心原因是按键读取的逻辑位置完全错了

你现在的代码里,Console.ReadKey()是放在while循环外面的——这意味着程序启动时只会读取一次按键输入,之后不管你按多少次回车,_key变量永远是最开始那次的输入值,自然触发不了_clock.Reset()

修复后的代码

static void Main(string[] args) 
{
    Clock _clock = new Clock();
    while (true) 
    {
        Console.WriteLine(_clock.Time);
        _clock.Tick();
        System.Threading.Thread.Sleep(1000);
        
        // 先检查是否有按键按下,避免阻塞时钟的正常运行
        if (Console.KeyAvailable)
        {
            ConsoleKeyInfo _key = Console.ReadKey(true); // true参数不显示按下的字符,界面更整洁
            // 用ConsoleKey枚举判断回车键,比硬编码(char)13可读性高得多
            if (_key.Key == ConsoleKey.Enter) 
            {
                _clock.Reset();
                Console.WriteLine("\n时钟已重置为00:00:00"); // 可选:给用户一个反馈提示
            }
        }
    }
}

关键修改点说明

  • 把按键读取移到循环内部:这样每次循环都会检查是否有新的按键输入,确保能捕捉到你按下回车的操作。
  • Console.KeyAvailable做前置检查:如果直接在循环里用Console.ReadKey(),程序会卡在那里等待按键,时钟就会停止跳动。加了这个检查后,只有当用户真的按下键时才会读取输入,不影响时钟的正常走时。
  • 替换硬编码的回车判断:用ConsoleKey.Enter代替(char)13,代码更清晰,也避免了字符编码相关的潜在问题。

只要你的Clock类的Reset()方法逻辑是正确的(比如把时、分、秒字段都重置为0),修改后按下回车键就能正常把时钟重置为00:00:00啦!

内容的提问来源于stack exchange,提问作者Kyle Sharp

火山引擎 最新活动