在WriteLine中未定义局部变量

时间:2018-10-30 19:13:15

标签: c# calculator

我在C#中是一个新手,我正在尝试做一个简单的计算器。 但是,当我写Console.WriteLine(total)时,出现编译时错误:

  

使用未分配的局部变量“总计”

     

访问之前,本地变量'total'可能未初始化

代码如下:

static void Main(string[] args)
{        
    Console.WriteLine("write a number:");
    int num_one = Convert.ToInt32(Console.ReadLine());

    Console.WriteLine("write a operator: + ; - ; * ; /");
    string op = Console.ReadLine();

    Console.WriteLine("write a second number:");
    int num_two = Convert.ToInt32(Console.ReadLine());

    int total;

    switch (op)
    {
        case "+":
            total = num_one + num_two;
            break;
        case "-":
            total = num_one - num_two;
            break;
        case "*":
            total = num_one * num_two;
            break;
        case "/":
            total = num_one / num_two;
            break;
    }

    Console.WriteLine(total); // <-- this line gives a compile-time error
}

3 个答案:

答案 0 :(得分:1)

问题:如果op^会发生什么?

答案:total从未分配给。这是C#中的错误。

要解决此问题,请在switch语句中处理其他情况(应该很容易,只有几十万个情况),或者在声明它时初始化total变量:

int total = 0;

答案 1 :(得分:0)

我建议使用Nullable整数以为其分配空值开头,最后检查它是否具有值,以识别用户是否输入了适当的运算符。

int? total = null;

答案 2 :(得分:0)

正如布林迪所说,您需要使用变量total的初始值或开关中的默认值来处理此问题。

但是在此之前,您真的需要考虑当尝试在两个数字之间进行未知运算时的逻辑情况。

我最简单的解决方案如下所示:

switch (op)
{
    case "+":
        total = num_one + num_two;
        break;
    case "-":
        total = num_one - num_two;
        break;
    case "*":
        total = num_one * num_two;
        break;
    case "/":
        total = num_one / num_two;
        break;
    default:
        throw new OperatorUnknownException(op);
}

如您所见,当运算符未知时,将引发异常。然后,您需要在调用函数中处理这种类型的异常。