请求完善C#控制台程序的退出确认循环逻辑
完善C#控制台程序的循环确认逻辑
原代码存在三个核心问题,导致无法实现预期功能甚至引发程序异常:
- 使用
int.Parse处理用户输入,若输入非数字会直接抛出异常导致程序崩溃 day % 7的计算结果范围是0-6,原代码中case 7永远不会被触发(7除以7余数为0)- 确认是否继续的内部
while循环缺少执行逻辑,且未更新输入变量,会陷入死循环
以下是修正后的完整代码:
using System; namespace ConsoleApp3 { class Program { static void Main(string[] args) { while (true) { // 处理数字输入,避免非数字导致的程序崩溃 int day; Console.WriteLine("Enter a number: "); while (!int.TryParse(Console.ReadLine(), out day)) { Console.WriteLine("Invalid input! Please enter a valid integer: "); } int dayToTest = day % 7; // 修正余数与星期的对应关系,7的倍数余数为0对应周日 switch (dayToTest) { case 1: Console.WriteLine("Monday"); break; case 2: Console.WriteLine("Tuesday"); break; case 3: Console.WriteLine("Wednesday"); break; case 4: Console.WriteLine("Thursday"); break; case 5: Console.WriteLine("Friday"); break; case 6: Console.WriteLine("Saturday"); break; case 0: Console.WriteLine("Sunday"); break; } // 处理程序继续执行的确认逻辑 string decision; do { Console.WriteLine("Would you like to reexecute the program? yes or no"); // 处理输入为null的情况,同时统一格式并去除空格 decision = Console.ReadLine()?.Trim().ToLower() ?? string.Empty; if (decision != "yes" && decision != "no") { Console.WriteLine("Invalid input! Please enter 'yes' or 'no'."); } } while (decision != "yes" && decision != "no"); // 判断是否退出程序 if (decision == "no") { break; } } } } }
关键修改说明
安全的数字输入处理:
用int.TryParse替代int.Parse,并嵌套循环反复提示用户输入有效数字,彻底避免非数字输入导致的崩溃问题。修正星期对应逻辑:
将原代码中的case 7改为case 0,因为任何7的倍数(包括7本身)除以7的余数都是0,这样才能正确识别周日。完善的循环确认逻辑:
使用do-while循环实现确认流程:- 每次循环都会重新获取用户输入
- 对输入做格式统一(转小写、去空格),同时处理输入为
null的边界情况 - 当输入不是
yes或no时,提示错误并重复询问,直到输入有效 - 输入有效后,判断是否退出外层循环
内容的提问来源于stack exchange,提问作者student
相关产品推荐
相关产品推荐

