基本的C#计算器练习 - “使用未分配的局部变量”错误

时间:2016-08-14 05:06:43

标签: c# .net asp.net-mvc

我正在用一个非常基本的计算器脚本练习switch语句,但我很困惑为什么写出浮点变量 result 的最后一行收到错误:“使用未分配的局部变量”。是的,有更好的方法来制作一个涉及循环的计算器,我想接下来尝试,但现在它是C#婴儿步骤。以下是我的代码,谢谢大家!

namespace Calculator
{
    class Program
    {
        static void Main(string[] args)
        {
            // Greeting.

            Console.WriteLine ("Welcome to the basic calculator");

            // Get first value.

            Console.WriteLine ("Enter the first value.");
            string firstValueAsText = Console.ReadLine ();
            float a = Convert.ToSingle (firstValueAsText);

            // Get second value.

            Console.WriteLine ("Enter the second value.");
            string secondValueAsText = Console.ReadLine ();
            float b = Convert.ToSingle (secondValueAsText);

            // Prompt operation.

            Console.WriteLine ("Enter '+', '-', '*', '/', '^'.");
            string operation = Console.ReadLine ();

            // Establishing the result and error variables for later.

            float result;
            string error = "ERROR";

            // Define switch operations.

            switch (operation)
            {
                case "+":
                    result = a + b;
                    break;
                case "-":
                    result = a - b;
                    break;
                case "*":
                    result = a * b;
                    break;
                case "/":
                    result = a / b;
                    break;
                case "^":
                    result = (float)Math.Pow(a, b);
                    break;
                default:
                    Console.WriteLine (error);
                    break;
            }

            // Print the result.

            Console.WriteLine (a + " " + operation + " " + b + " = " + result);
            Console.ReadKey ();
        }
    }
}

3 个答案:

答案 0 :(得分:0)

如果用户输入无效操作,它将进入default:流程。在这种情况下,永远不会分配result

您可以通过执行以下操作来解决此问题:

float result = 0;

或:

default:
    Console.WriteLine (error);
    result = 0;
    break;

答案 1 :(得分:0)

您没有初始化变量result,并且未在所有执行路径上分配它。您可以通过在声明时初始化它来克服此编译器错误:

float result = 0; 

...或者将其设置在交换机的default路径中:

default:
    result = 0;
    Console.WriteLine(error);
    break;

答案 2 :(得分:0)

如果用户输入了异常的内容,那么它将转到default大小写,因此您可以通过类似

的方式来处理
default:
  {
    Console.WriteLine (error);
    result = 0;
    break;
  }