如何通过回车键或非姓名类值关闭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
相关产品推荐
相关产品推荐

