C#中switch语句的伪代码

时间:2018-10-29 18:52:23

标签: c# switch-statement pseudocode

如何在C#中为switch(case)语句编写伪代码?

switch (option)
{
    case 1:
        Console.Write("Enter First Number: ");
        num1 = Convert.ToDouble(Console.ReadLine());

        Console.Write("Enter Second Number: ");
        num2 = Convert.ToDouble(Console.ReadLine());

        result = num1 + num2;
        Console.WriteLine(result);
        break;

    case 2:
        Console.Write("Enter First Number: ");
        num1 = Convert.ToDouble(Console.ReadLine());

        Console.Write("Enter Second Number: ");
        num2 = Convert.ToDouble(Console.ReadLine());

        result = num1 - num2;
        Console.WriteLine(result);
        break;

    case 3:
        Console.Write("Enter First Number: ");
        num1 = Convert.ToDouble(Console.ReadLine());

        Console.Write("Enter Second Number: ");
        num2 = Convert.ToDouble(Console.ReadLine());

        result = num1 * num2;
        Console.WriteLine(result);
        break;

    default:
        Console.WriteLine("\n Next time follow instructions. You can only choose numbers 1 - 4");
        break;
}

3 个答案:

答案 0 :(得分:2)

因此,如果要编写此代码,我将从操作的枚举类型开始:

public enum ArithmeticOperation
{
    Add,
    Subtract,
    Multiply,
    Divide,
}

我会写一些辅助函数:

 private static string ShowEnumOptions<T>() where T : struct
 {
     if (!typeof(T).IsEnum)
     {
         throw new ArgumentException($"Type: {typeof(T).ToString()} must be an enumerated type");
     }

     var options = Enum.GetNames(typeof(T));
     return string.Join("/", options);
 }

(C#的最新版本(我尚未使用)允许对通用类型参数进行System.Enum约束,这将简化此过程)

然后,我将编写主程序,如下所示:

static void Main(string[] args)
{
    while (true)
    {
        ArithmeticOperation operation = default(ArithmeticOperation);
        var goodOperation = false;
        while (!goodOperation)
        {
            Console.Write(
                $"Enter operation (one of [{ShowEnumOptions<ArithmeticOperation>()}] or \"Quit\"): ");
            var response = Console.ReadLine();
            if (string.Equals(response, "Quit", StringComparison.InvariantCultureIgnoreCase))
            {
                return; //quit the app
            }

            if (Enum.TryParse<ArithmeticOperation>(response, true, out operation))
            {
                goodOperation = true;
            }
        }

        double value1 = 0.0;
        double value2 = 0.0;        //initialize them to keep the compiler happy
        var goodDouble = false;
        while (!goodDouble)
        {
            Console.Write("Enter the first number: ");
            var response = Console.ReadLine();
            if (double.TryParse(response, out value1))
            {
                goodDouble = true;
            }
        }
        goodDouble = false;
        while (!goodDouble)
        {
            Console.Write("Enter the second number: ");
            var response = Console.ReadLine();
            if (double.TryParse(response, out value2))
            {
                goodDouble = true;
            }
        }

        //ok, got an operation and two numbers

        double result = 0.0;
        switch (operation)
        {
            case ArithmeticOperation.Add:
                result = value1 + value2;
                break;
            case ArithmeticOperation.Subtract:
                result = value1 - value2;
                break;
            case ArithmeticOperation.Multiply:
                result = value1 * value2;
                break;
            case ArithmeticOperation.Divide:
                if (value2 == 0.0)
                {
                    Console.WriteLine("Division by zero is invalid");
                    result = double.NaN;   //NaN means "not a number"
                    break;
                }
                result = value1 / value2;
                break;
        }

        Console.WriteLine($"Result is {result}");
    }
}

请注意,我检查了所有输入的有效性。始终假设您的用户将输入错误的数据。另请注意,我检查我的double是否等于零。检查浮点相等性通常不是一个好主意,但这是正确的做法。

然后,作为伪代码,我要写的只是:

 // Get the operation (one of add/subtract/multiply or divide) - or allow the user to quit
 // Get each of value1 and value2 as doubles
 // Based on the operation, calculate the result (pay attention to division by zero)
 // Show the result
 // Loop back and let the user try again (or quit)

答案 1 :(得分:0)

伪代码基本上是在注释中编写您要执行的操作。您的教授可能想教您的是,提出一堆注释来规划代码的结构,然后编写代码。以上是功能代码。冒着回答您作业问题的风险,我会说这样的事情:

switch(option)
{
    case 1:
        //do something
        break;
    case 2:
        //do something else
        break;
    default:
        //what to do if none of the cases are met
        break;
} 

答案 2 :(得分:0)

我不知道您所说的伪代码是什么意思,但是此代码重复性较低:

TypeError: 'NoneType' object is not subscriptable