C#中Switch Case的E选项失效且报‘输入字符串格式不正确’错误求助
C#插槽预订功能退出异常问题解决
问题根源:你的
switch分支处理'E'/'e'时,没有彻底跳出外层的while(true)循环,导致程序继续执行到读取插槽编号的代码,而此时输入的'E'/'e'无法转换为整数,触发格式错误。具体修复步骤:
完善Switch分支的退出逻辑
在'E'/'e'的case块中,执行退出提示后,要确保直接跳出外层的while循环。可以用跳转标记或者在switch结束后判断选项再执行break。
示例代码片段:while (true) { Console.WriteLine("选择操作:B-预订 | C-取消 | E-退出"); string input = Console.ReadLine()?.Trim().ToLower(); switch (input) { case "b": // 执行预订逻辑 break; case "c": // 执行取消逻辑 break; case "e": Console.WriteLine("程序即将退出"); goto ExitLoop; // 直接跳转到循环外 default: Console.WriteLine("无效选项,请重新输入"); continue; // 回到循环开头,避免执行后续代码 } // 仅当选择B/C时才执行以下插槽输入逻辑 Console.WriteLine("输入插槽编号:"); // 用TryParse替代Convert.ToInt32,避免非数字输入报错 if (int.TryParse(Console.ReadLine(), out int slot)) { // 处理插槽相关操作 } else { Console.WriteLine("请输入有效的数字编号"); } } ExitLoop: // 跳转标记,用于退出循环替换不安全的类型转换
用int.TryParse()替代Convert.ToInt32()处理控制台输入,前者能在输入非数字时返回false,避免抛出异常,同时可以给出友好提示。优化代码执行路径
确保只有选择需要操作插槽的选项(B/C)时,才执行读取插槽编号的代码。用continue在遇到无效选项时直接回到循环开头,避免无用的代码执行。
内容的提问来源于stack exchange,提问作者Daniel Joshua Ureta
相关产品推荐
相关产品推荐

