知道为什么这个计算器控制台应用程序不能工作吗?

本文关键字:不能 应用程序 工作 控制台 计算器 为什么 | 更新日期: 2023-09-27 18:13:01

所以我一直在开发关于如何编写计算器的想法,我每次都得到一个未处理的异常,但代码没有出现任何错误,并且在多次阅读代码后,我不确定出了什么问题。

string inp;
int location;
double num1, num2, ans;
string[] ops = {"+", "-", "*", "/" };
Console.WriteLine("Calculator");
Console.WriteLine("Enter a Calculation.");
inp = Console.ReadLine();
if (inp.Contains(ops[0])) 
{
    location = inp.IndexOf("+");
    num1 = double.Parse(inp.Substring(0, location));
    num2 = double.Parse(inp.Substring(location +1));
    ans = num1 + num2;
    Console.WriteLine("{0}+{2}={3}", num1, num2, ans.ToString("0.###"));
}
else if (inp.Contains(ops[1]))
{
    location = inp.IndexOf("-");
    num1 = double.Parse(inp.Substring(0, location));
    num2 = double.Parse(inp.Substring(location +1));
    ans = num1 - num2;
    Console.WriteLine("{0}-{2}={3}", num1, num2, ans.ToString("0.###"));
}
else if (inp.Contains(ops[2])) 
{
    location = inp.IndexOf("*");
    num1 = double.Parse(inp.Substring(0, location));
    num2 = double.Parse(inp.Substring(location +1));
    ans = num1 * num2;
    Console.WriteLine("{0}*{2}={3}", num1, num2, ans.ToString("0.###"));
}
else if (inp.Contains(ops[3]))
{
    location = inp.IndexOf("/");
    num1 = double.Parse(inp.Substring(0, location));
    num2 = double.Parse(inp.Substring(location +1));
    ans = num1 / num2;
    Console.WriteLine("{0}/{2}={3}", num1, num2, ans.ToString("0.###"));
}

知道为什么这个计算器控制台应用程序不能工作吗?

你什么也看不到,因为代码抛出了一个异常,并且在没有告诉你任何事情的情况下结束了,但是如果你调试代码,你可以检测到;)

代码不显示任何错误

代码没有编译错误,但你的代码在运行时生成错误

因为这行

你有一个异常
Console.WriteLine("{0}+{2}={3}", num1, num2, ans.ToString("0.###"));

{0} + {2} = {3} 必须 {0} + {1} = {2}

作为

定义的数组的索引
num1, num2, ans.ToString("0.###")

当你向用户显示结果时,你的索引顺序是错误的:控制台。WriteLine("{0}+{2}={3}",num1, num2, ans.ToString("0 .###"));

将索引号更改为0,1,2…并在格式化字符串时获取变量

当用户输入多个操作符时,如:22+66+88

我更新了你的+操作符部分以避免这种情况。看看这个

        string inp;
        int location;
        double num1, num2, ans = 0.0;
        string[] ops = { "+", "-", "*", "/" };
        string[] numbers;
        string output;
        Console.WriteLine("Calculator");
        Console.WriteLine("Enter a Calculation.");
        inp = Console.ReadLine();
        if (inp.Contains(ops[0]))
        {
            numbers = inp.Split('+');
            output = "";
            for (int i = 0; i < numbers.Length; i++)
            {
                ans += Convert.ToDouble(numbers[i]);
            }

            Console.WriteLine("{0} = {1}", inp, ans.ToString("0.###"));
            Console.ReadLine();
        }

在写出结果时,请确保在格式化字符串时使用正确的语法。

Console.WriteLine("{0}+{1}={2}", num1, num2, ans.ToString("0.###"));

代码可以正确编译。但是它有一些逻辑上的错误首先需要改变控制台。WriteLine("{0}+{2}={3}",num1, num2, ans.ToString("0。# # #"))来控制台。WriteLine("{0}+{1}={2}",num1, num2, ans.ToString("0。# # #"))在此更改之后,代码将适用于单个表达式,如2+8或3-8对于多重计算,更改逻辑以从计算字符串中获取'num'值