需要帮助改进基本C#计算器吗

需要帮助改进基本C#计算器吗,c#,code-cleanup,C#,Code Cleanup,我制作了这个基本的C#计算器,来反思我这几天学到的东西。我是一个绝对的初学者,我想得到改进和缩短它的建议 我曾尝试添加switch语句和多个方法,但很难掌握它们 using System; namespace lol { class Program { static void Main(string[] args) { Console.WriteLine("Hi! What is your name?"); string name = C

我制作了这个基本的C#计算器,来反思我这几天学到的东西。我是一个绝对的初学者,我想得到改进和缩短它的建议

我曾尝试添加switch语句和多个方法,但很难掌握它们

using System;

namespace lol
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine("Hi! What is your name?");
        string name = Console.ReadLine();

        Console.WriteLine(name + " What do you wanna do?");

        Console.WriteLine("Type \"+\" for addition");
        Console.WriteLine("Type \"-\" for Subraction");
        Console.WriteLine("Type \"*\" for Multiplication");
        Console.WriteLine("Type \"/\" for division");

        string operation = Console.ReadLine();

        Console.Write("Now, Give me number one: ");
        double num1 = Convert.ToDouble(Console.ReadLine());

        Console.Write("Now give me number two: ");
        double num2 = Convert.ToDouble(Console.ReadLine());

        if (operation == "+")
        {
            Console.WriteLine(num1 + num2);
        }
        else if (operation == "-")
        {
            Console.WriteLine(num1 - num2);
        }

        else if (operation == "*")
        {
            Console.WriteLine(num1 * num2);
        }

        else
        {
            Console.WriteLine(num1 / num2);

        }

    }
  }
}

如果对你的眼睛有好处,你可以这样写:

static class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hi! What is your name?");
        string name = Console.ReadLine();

        Console.WriteLine(name + " What do you wanna do?");
        string[] operations = new string[] { "\"+\" for addition", "\"-\" for subtraction", "\"*\" for multiplication", "\"/\" for divsion" };
        foreach (string operation in operations) { Console.WriteLine("Type " + operation); }

        string cmd = Console.ReadLine();

        Console.Write("Now, Give me number one: ");
        double num1 = Convert.ToDouble(Console.ReadLine());

        Console.Write("Now give me number two: ");
        double num2 = Convert.ToDouble(Console.ReadLine());

        switch (cmd)
        {
            case "+": Console.WriteLine(num1 + num2); break;
            case "-": Console.WriteLine(num1 - num2); break;
            case "*": Console.WriteLine(num1 * num2); break;
            case "/": Console.WriteLine(num1 / num2); break;
        }
    }
}

如果对你的眼睛有好处,你可以这样写:

static class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hi! What is your name?");
        string name = Console.ReadLine();

        Console.WriteLine(name + " What do you wanna do?");
        string[] operations = new string[] { "\"+\" for addition", "\"-\" for subtraction", "\"*\" for multiplication", "\"/\" for divsion" };
        foreach (string operation in operations) { Console.WriteLine("Type " + operation); }

        string cmd = Console.ReadLine();

        Console.Write("Now, Give me number one: ");
        double num1 = Convert.ToDouble(Console.ReadLine());

        Console.Write("Now give me number two: ");
        double num2 = Convert.ToDouble(Console.ReadLine());

        switch (cmd)
        {
            case "+": Console.WriteLine(num1 + num2); break;
            case "-": Console.WriteLine(num1 - num2); break;
            case "*": Console.WriteLine(num1 * num2); break;
            case "/": Console.WriteLine(num1 / num2); break;
        }
    }
}

使用枚举并检查用户输入是否有效。我还添加了一个循环,检查用户是否想要输入方程式。 参考资料:

您可以在这里尝试:

使用系统;
公共课程
{
枚举运算器
{
opAdd=0,
opSub=1,
opDiv=2,
opMul=3,
opInvalid=int.MinValue+1,
opQuit=int.MinValue
}
公共静态void Main()
{
双a=0.0,b=0.0;
eOperator op=eOperator.opQuit;
字符串输入=string.Empty;
控制台写入线(“计算器”);
WriteLine(“随时输入'quit'退出”);
//重复此操作,直到用户想要退出。
do//while(op!=eOperator.opQuit)
{
Console.Write(“a=”);
输入=Console.ReadLine().ToLower().Trim();
if(双色色色(输入,输出a))
{
//输入是有效的双精度,并存储在
控制台。写入(“操作员:”);
输入=Console.ReadLine().ToLower().Trim();
开关(输入)
{
格“+”:
op=eOperator.opAdd;
打破
案例“-”:
op=eOperator.opSub;
打破
案例“*”:
op=eOperator.opMul;
打破
案例“/:
op=eOperator.opDiv;
打破
“退出”案例:
op=eOperator.opQuit;
打破
违约:
op=eOperator.opInvalid;//不能保留为退出
Console.WriteLine(“无效输入+,-,*,/或为操作员退出”);
打破
}
if(op!=eOperator.opQuit&&op!=eOperator.opInvalid)
{
//用户未选择退出或键入无效内容
Console.Write(“b=”);
输入=Console.ReadLine().ToLower().Trim();
if(双色色色(输入,输出b))
{
//输入是有效的双精度,已解析为b
double result=a;//我们在a上使用运算符,因此我们最好立即将a存储到结果中。
//对结果执行操作。
开关(op)
{
案例eOperator.opAdd:
结果+=b;
打破
案例eOperator.opSub:
结果-=b;
打破
案例eOperator.opMul:
结果*=b;
打破
案例eOperator.opDiv:
//通过0检查Div。如果没有此项,则由于double具有+/-inf值,因此此项仍然有效。
如果(b!=0.0)//将double与=和!=进行比较通常是个坏主意,但是保存0.0时不会出现舍入错误。
{
结果/=b;
}
其他的
{
控制台写入线(“被0分割”);
op=eOperator.opInvalid;
}
打破
违约:
//如果分支检查了其他两个运算符,则会发生此异常。因为在检查之后我们从未遇到过op,所以此异常永远不会发生。
//如果逻辑中出现了错误,那么最好将其包括在内,以发现错误。
抛出新异常(“这不应该发生”);
}
if(op!=eOperator.opInvalid)
{
Console.WriteLine(“结果:+Result.ToString());
}
//目前唯一的无效操作是div by 0。在这种情况下,消息已发送给用户,因此此时不需要其他操作。
//或者,您可以将错误消息存储到字符串中,当op=opInvalid时,在此处显示该错误消息。
//如果出现多个问题,这将是一个好主意。
}
否则如果(输入=“退出”)
{
//b的输入为无效数字,但输入为“退出”
op=eOperator.opQuit;
}
其他的
{
//b的输入是无效数字,也不是“退出”,显示错误消息
Console.WriteLine(“无效条目。键入数字或退出”);
}
}
}
否则如果(输入=“退出”)
{
//输入的数字无效,但“退出”
op=eOperator.opQuit;
}
其他的
{
//a的输入是无效的数字,也不是“退出”