任何想法为什么这个计算器控制台应用程序不起作用?

时间:2016-10-14 12:52:12

标签: c# console-application calculator unhandled-exception

所以我一直在开发关于如何编写计算器的想法,并且我每次都会继续获取未处理的异常,但代码不会出现任何错误,并且在多次读取代码后我不确定是什么出错了。

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.###"));
}

4 个答案:

答案 0 :(得分:5)

你没有看到任何东西,因为代码抛出一个异常并且在没有告诉你任何事情的情况下完成,但你可以在调试代码时检测到它;)

  

代码不会出现任何错误

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

因为这行

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

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

因为它们是由

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

答案 1 :(得分:1)

在此处向用户显示结果时,您的索引顺序错误: Console.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();
        }

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

编译是正确的。但它有一些逻辑错误 - 首先需要改变 Console.WriteLine(&#34; {0} + {2} = {3}&#34;,num1,num2,ans.ToString(&#34; 0。###&#34;)) 至 Console.WriteLine(&#34; {0} + {1} = {2}&#34;,num1,num2,ans.ToString(&#34; 0。###&#34;)) 在此更改之后,代码将适用于单个表达式,如2 + 8或3-8 对于多重更改,你需要改变你的逻辑以获得“数字”。来自计算字符串的值。