我在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
}
答案 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);
}
如您所见,当运算符未知时,将引发异常。然后,您需要在调用函数中处理这种类型的异常。