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

如何通过回车键或非姓名类值关闭C#控制台程序?

搞定C#控制台程序的退出逻辑问题

嘿,我来帮你解决这个控制台程序的退出难题~你现在的问题核心是那个while(true)死循环没有终止条件,所以不管输入啥都会一直跑。咱们只要在读取输入后加个判断,就能实现按回车或者输入特定指令(比如y/n)退出的需求,还能避免之前的bug。

具体修改方案

给你两种实用的实现方式,你可以按需选择:

方式1:直接按回车键(空输入)退出

当用户啥也不输入直接按回车时,就终止循环关闭程序,操作很直观:

namespace Likes {
    class Program {
        static void Main(string[] args) {
            var rollcall = new List<string>();
            while (true) {
                Console.WriteLine("请输入姓名(直接按回车即可退出程序):");
                string input = Console.ReadLine();
                
                // 先判断是不是空输入(包括纯空格的情况)
                if (string.IsNullOrWhiteSpace(input)) {
                    break; // 跳出死循环,程序后续会自动结束
                }
                
                // 输入有效,才加到列表里
                rollcall.Add(input);
                
                // 这里可以保留你原来统计人数的逻辑,比如:
                var count = rollcall.Count;
                Console.WriteLine($"目前已经录入了{count}个姓名");
            }
            
            // 加个友好提示,让用户知道程序要关了
            Console.WriteLine("程序即将关闭,按任意键确认...");
            Console.ReadKey();
        }
    }
}

方式2:输入特定指令(比如y/n、exit)退出

如果想让用户输入明确指令才退出(比如输入n或者exit),只要修改判断条件就行:

namespace Likes {
    class Program {
        static void Main(string[] args) {
            var rollcall = new List<string>();
            while (true) {
                Console.WriteLine("请输入姓名(输入'exit'或'n'可退出程序):");
                string input = Console.ReadLine();
                
                // 判断是不是退出指令,忽略大小写(比如输入Exit也能生效)
                if (string.Equals(input, "exit", StringComparison.OrdinalIgnoreCase) 
                    || string.Equals(input, "n", StringComparison.OrdinalIgnoreCase)) {
                    break;
                }
                
                // 过滤空输入,避免把无效内容加到列表里
                if (!string.IsNullOrWhiteSpace(input)) {
                    rollcall.Add(input);
                    var count = rollcall.Count;
                    Console.WriteLine($"目前已经录入了{count}个姓名");
                } else {
                    Console.WriteLine("请输入有效的姓名,或者输入指令退出哦");
                }
            }
            
            Console.WriteLine("程序即将关闭,按任意键确认...");
            Console.ReadKey();
        }
    }
}

为啥之前的尝试会出bug?

估计是你把退出判断的位置放错了——比如先把输入加到列表里,才判断是不是要退出,结果空值或者指令被塞进了rollcall列表里,导致后续逻辑出问题。上面的代码都是先判断退出条件,再处理有效输入,就能避开这个坑啦。

另外提两个小细节:

  • string.IsNullOrWhiteSpace()比单纯判断input == ""更靠谱,能同时处理用户输入一堆空格的情况
  • 用StringComparison.OrdinalIgnoreCase可以让指令不区分大小写,用户体验更好

内容的提问来源于stack exchange,提问作者D. Engle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:41:39