Visual Studio抛出错误“使用未分配的var”

时间:2014-03-15 18:18:16

标签: c#

好的,所以我有一个编程类的任务,使用不同操作的方法创建一个计算器。 在这一行:

        Console.WriteLine("{0}{1}{2}", num1, op, num2);

我收到了 错误2使用未分配的本地变量' op'

我无法弄明白为什么,这里是整个代码: 感谢您的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LabAssignFiveCalc
{
    class Program
    {
        //Addition method
        static double Addition(int num1, int num2)
        {
            double result;
            result = num1 + num2;
            return result;
        }
        //Subtraction method
        static double Subtract(int num1, int num2)
        {
            double result;
            result = num1 - num2;
            return result;

        }
        //Multiplication method
        static double Multiply(int num1, int num2)
        {
            double result;
            result = num1 * num2;
            return result;
        }
        //Division method
        static double Divide(int num1, int num2)
        {
            double result;
            result = num1 / num2;
            return result;

        }
        //Main
        static void Main(string[] args)
        {
            //Declare Variables
            int choice;
            string op;
            double num1;
            double num2;
            double result;
            //Ask user for calculation parameters
            Console.WriteLine("Calculator:");
            Console.WriteLine("Which operation do you wish to perform? Type the corresponding number.");
            Console.WriteLine("1) Addition\n2) Subration\n3) Multiplication\n4) Division");
            choice = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Please type the first number you wish to calculate");
            num1 = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Please type the second number you wish to calculate");
            num2 = Convert.ToDouble(Console.ReadLine());
            //Declare Operator
            switch (choice)
            {
                case 1:
                    op = "+";
                    break;
                case 2:
                    op = "-";
                    break;
                case 3:
                    op = "*";
                    break;
                case 4:
                    op = "/";
                    break;
            }
            //Show Calculation
            Console.WriteLine("{0}{1}{2}", num1, op, num2);
            Console.ReadKey();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

default块中没有switch选项,因此如果用户输入的内容不是1,2,3或4,则无法分配op变量。

我建议您使用循环再次询问用户是否输入了无效值:

int choice;

do
{
    Console.WriteLine("1)Addition\n2)Subration\n3)Multiplication\n4)Division");
    choice = Convert.ToInt32(Console.ReadLine());
}
while (choice < 1 && 4 < choice);

接下来是添加默认案例:

switch (choice)
{
    case 1: op = "+"; break;
    case 2: op = "-"; break;
    case 3: op = "*"; break;
    case 4: op = "/"; break;
    default:
        throw new InvalidOperationException();       
}

或者,您可以将所有非1,2或3的值视为除法运算:

switch (choice)
{
    case 1: op = "+"; break;
    case 2: op = "-"; break;
    case 3: op = "*"; break;
    default:
        op = "/"; break;
}

在声明变量时,您可以指定默认值,而不是添加默认值:

string op = null;

答案 1 :(得分:2)

规则:您应该始终初始化所有本地变量。

如果您发现代码num1num2在切换块之前已正确初始化,但您在op块中分配了switch值。

编译器无法识别哪个块被执行,直到您运行程序。

因此你应该在切换块之前初始化op,或者你应该声明默认块以确保在编译时初始化。

解决方案1:

替换它:

string op;

有了这个:

string op = string.Empty;

解决方案2:

       switch (choice)
        {
            case 1:
                op = "+";
                break;
            case 2:
                op = "-";
                break;
            case 3:
                op = "*";
                break;
            case 4:
                op = "/";
                break;
            default:
                op = "";
                break;
        }