如何让C#控制台应用在动物选择无效时立即返回错误?
C#动物选择菜单输入校验优化问题解决
问题描述
已完成C#控制台应用主体开发,在动物选择菜单(选项为1、2、3、4)中,希望用户选择无效选项(如5)时,程序立即返回错误提示,但当前程序会先提示输入动物名称,之后才返回错误。
问题原因
代码逻辑顺序错误:先获取了动物选择项animalChoice,随后直接执行获取动物名称animalName的步骤,最后才校验animalChoice的有效性,导致无效选择时仍会触发名称输入流程。
解决方案
调整代码执行顺序,先校验动物选择项的有效性,仅当选择有效时,再提示输入动物名称。同时清理冗余逻辑。
修改后的完整代码
using System; abstract class Animal { public string Name { get; set; } public abstract void Speak(); } class Dog : Animal { public override void Speak() { Console.WriteLine($"The dog {Name} barks."); } } class Cat : Animal { public override void Speak() { Console.WriteLine($"The cat {Name} meows."); } } class Pig : Animal { public override void Speak() { Console.WriteLine($"The pig {Name} oinks."); } } class Cow : Animal { public override void Speak() { Console.WriteLine($"The cow {Name} moos."); } } class Program { static void Main(string[] args) { Animal[] animals = new Animal[100]; int animalCount = 0; var menuChoice = ""; while (menuChoice != "3") { Console.WriteLine("Select an option:"); Console.WriteLine("1. Enter an animal"); Console.WriteLine("2. Have all animals speak"); Console.WriteLine("3. Exit"); menuChoice = Console.ReadLine(); switch (menuChoice) { case "1": if (animalCount >= 100) { Console.WriteLine("Maximum number of animals reached."); break; } Console.WriteLine("Select an animal:"); Console.WriteLine("1. Dog"); Console.WriteLine("2. Cat"); Console.WriteLine("3. Pig"); Console.WriteLine("4. Cow"); var animalChoice = Console.ReadLine(); // 先校验动物选择是否有效 if (!new[] { "1", "2", "3", "4" }.Contains(animalChoice)) { Console.WriteLine("That was not a valid animal selection, please choose again from the menu above."); break; } // 选择有效时才提示输入名称 Console.WriteLine("Enter the desired animal's name:"); var animalName = Console.ReadLine(); switch (animalChoice) { case "1": animals[animalCount] = new Dog { Name = animalName }; animalCount++; Console.WriteLine($"Added a dog named {animalName}."); break; case "2": animals[animalCount] = new Cat { Name = animalName }; animalCount++; Console.WriteLine($"Added a cat named {animalName}."); break; case "3": animals[animalCount] = new Pig { Name = animalName }; animalCount++; Console.WriteLine($"Added a pig named {animalName}."); break; case "4": animals[animalCount] = new Cow { Name = animalName }; animalCount++; Console.WriteLine($"Added a cow named {animalName}."); break; } break; case "2": if (animalCount == 0) { Console.WriteLine("There are currently no assigned animals that can speak."); } else { for (int i = 0; i < animalCount; i++) { animals[i].Speak(); } } break; case "3": Console.WriteLine("Thank you for using Animal Farm"); break; default: Console.WriteLine("Invalid selection, please choose an option from the menu above."); break; } } } }
关键修改说明
- 调整逻辑顺序:在获取
animalChoice后立即校验是否为有效选项(1-4),无效则直接输出错误并跳出当前分支,避免执行后续名称输入步骤。 - 清理冗余代码:删除原代码中未生效的
Animal animal = null及后续的if(animal != null)逻辑,该逻辑因animal始终为null无实际作用。
内容的提问来源于stack exchange,提问作者Conner001
相关产品推荐
相关产品推荐

