You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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;
            }
        }
    }
}

关键修改说明

  1. 调整逻辑顺序:在获取animalChoice后立即校验是否为有效选项(1-4),无效则直接输出错误并跳出当前分支,避免执行后续名称输入步骤。
  2. 清理冗余代码:删除原代码中未生效的Animal animal = null及后续的if(animal != null)逻辑,该逻辑因animal始终为null无实际作用。

内容的提问来源于stack exchange,提问作者Conner001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:09:55