简单的计算器型程序。使用未分配的局部变量?

时间:2014-12-18 20:13:36

标签: c#

我只有几周的编程时间并且认为我只是有一些乐趣并编写一个小型计算器类型的控制台应用程序。但是,我似乎遇到了一个我无法理解的问题。我在尝试运行“回答”的程序时遇到错误。是一个未分配的局部变量,但我很确定它不是???它的回答是'在最后一个Console.WriteLine();

我已经仔细检查了所有拼写相同的内容,包括相同的情况。

static void Main(string[] args)
    {
        int firstNumber, secondNumber, answer;
        string op;

        Console.WriteLine("Please enter a number:");
        firstNumber = int.Parse(Console.ReadLine());
        Console.WriteLine("Please enter a second number:");
        secondNumber = int.Parse(Console.ReadLine());

        for (int i = 0; i < 1; i++)
        {
            Console.WriteLine("Please choose an op +, -, x, or /");
            op = Console.ReadLine();

            if (op != "+" || op != "-" || op != "x" || op != "/")
            {
                i += -1;
                Console.WriteLine("Please try again");
            }
        }

        if (op == "+")
            answer = firstNumber + secondNumber;
        else if (op == "-")
            answer = firstNumber - secondNumber;
        else if (op == "x")
            answer = firstNumber * secondNumber;
        else if (op == "/")
            answer = firstNumber / secondNumber;
        else
            answer = 0;

        Console.WriteLine(answer);
        Console.ReadLine();
    }

编辑:&#34;请选择操作&#34;行应该已经在循环中。修正如上。

现在确切的错误消息(移动了上面的WriteLine)

  

错误1使用未分配的本地变量&#39; op&#39;

这似乎已经取代了最后一条错误消息,该消息表示同样的回答&#39;。 &#39;运算&#39;在第一个 if 语句中加下划线。

当我点击&#34;开始&#34>时会出现错误。在Visual Studio 2013 Express的调试模式下

2 个答案:

答案 0 :(得分:1)

您的错误是在编译程序期间生成的(而不是执行它)。根据您编写for循环的方式,正文可能执行也可能不执行。编译器不进行分析以试图弄清楚,并假设正文可能无法执行。如果主体不执行,下面的代码将引用未初始化的局部变量。您必须初始化变量(通常是您声明它的位置),或使用不同的循环结构。例如,您可以使用:

        while (true) {
            Console.WriteLine("Please choose an op +, -, x, or /");
            op = Console.ReadLine();
            if (op == "+" || op == "-" || op == "x" || op == "/") break;
            Console.WriteLine("Please try again");
        }

在此代码中,编译器知道循环体必须至少执行一次。

答案 1 :(得分:0)

我很确定它应该是:

for (int i = 0; i < 1; i++)
    {
        if (op != "+" && op != "-" && op != "x" && op != "/")
        {
            i += -1;
            Console.WriteLine("Please try again");
        }
    }

但是,你为什么要这样写呢?