基本c#计算器练习-“使用未赋值的局部变量”错误

本文关键字:赋值 局部变量 错误 计算器 练习 基本 | 更新日期: 2023-09-27 18:02:23

我正在用一个非常基本的计算器脚本练习开关语句,但我很困惑为什么我的最后一行写出浮点变量结果正在接收错误:"使用未分配的局部变量"。是的,有更好的方法来制作一个包含循环的计算器,我接下来想尝试一下,但现在它是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 ();
        }
    }
}

基本c#计算器练习-“使用未赋值的局部变量”错误

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

你可以这样做:

float result = 0;

或:

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

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

float result = 0; 

…或者在交换机的default路径中设置:

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

如果用户输入了一些不寻常的内容那么它就会变成default,所以你可以通过

来处理这个问题
default:
  {
    Console.WriteLine (error);
    result = 0;
    break;
  }