如何让输入字母触发switch语句default分支的菜单提示?
解决输入非数字导致程序崩溃的问题
问题出在Int32.Parse(Console.ReadLine())这行代码:当输入内容无法转换为整数时(比如字母、特殊字符),Parse方法会直接抛出FormatException,导致程序崩溃。要实现输入非数字时触发default分支,需要用安全的整数解析方法——Int32.TryParse。
修改方案
- 用
Int32.TryParse替代Int32.Parse,该方法不会抛出异常,而是返回布尔值表示解析是否成功,同时通过out参数返回解析后的整数。 - 如果解析失败,将
input设为一个不在1-4范围内的值(比如0),这样switch语句就会进入default分支,触发错误提示。
修改后的完整代码
internal class Program { static void Main(string[] args) { bool minBool = true; string foreMal = null; while (minBool) { Console.WriteLine("Välkommen till ryggsäcken. Vad vill du göra?: "); Console.WriteLine("[1] Lägg till ett föremål"); Console.WriteLine("[2] Skriv ut innehållet"); Console.WriteLine("[3] Rensa innehållet"); Console.WriteLine("[4] Avsluta"); // 安全解析输入 int input; bool isValidInput = Int32.TryParse(Console.ReadLine(), out input); // 如果解析失败,设置input为0(不在1-4范围内) if (!isValidInput) { input = 0; } switch (input) { case 1: Console.WriteLine("Var god ange ett föremål"); foreMal = Console.ReadLine(); break; case 2: Console.WriteLine("Ryggsäcken innehåller: " + " " + foreMal); break; case 3: Console.WriteLine("Ryggsäcken rensas"); foreMal = ""; break; case 4: minBool = false; break; default: Console.WriteLine("Felaktigt menyval"); break; } } } }
补充说明
Int32.TryParse的第一个参数是要解析的字符串,第二个out参数会存储解析后的整数(如果成功)。- 当输入非数字时,
isValidInput会变为false,此时将input设为0,确保switch进入default分支,和输入5等无效数字的处理逻辑一致。
内容的提问来源于stack exchange,提问作者Johan Falk
相关产品推荐
相关产品推荐

