2

对不起,我对编程世界完全陌生。我正在创建一个控制台应用程序,它基本上接受您是否要将摄氏温度转换为华氏温度或反之亦然的输入。

我遇到的问题是:

“错误 3 不能在此范围内声明名为‘选择’的局部变量,因为它会给‘选择’赋予不同的含义,‘选择’已在‘父或当前’范围中用于表示其他内容”

我尝试查看其他示例,但它们比我的大脑现在可以理解的要复杂得多。

namespace TemperatureApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int choice;

            do
            {
                Console.WriteLine("Hi! This is a temperatue app");
                Console.WriteLine("Press 1 for C to F or 2 for F to C");
                //take the user input
                int choice = Convert.ToInt32(Console.ReadLine());


                if (choice == 1)
                {
                    Console.WriteLine("Great, you chose C to F. Now enter the temp.");
                    int celcius = Convert.ToInt32(Console.ReadLine());
                    //next line use the formula and show answer
                }
                if (choice == 2)
                {
                    Console.WriteLine("Great, you chose F to C. Now enter the temp.");
                    int fahrenheit = Convert.ToInt32(Console.ReadLine());
                    //next line use the formula and show answer
                }
                else
                    Console.WriteLine("That is not the right choice.");
                    //In this way, keep asking the person for either 1 or two

            }
            while (choice != 1 || choice != 2);

            Console.ReadLine();
        }
    }
}
4

5 回答 5

6
int choice = Convert.ToInt32(Console.ReadLine());

应该读

choice = Convert.ToInt32(Console.ReadLine());

通过int第二次放入,您在 {} 中声明了另一个名为“choice”的变量。该定义与外面的定义相冲突。

于 2013-02-08T20:58:12.003 回答
1

这一切都在错误消息中,您已经在同一范围内两次声明了您的选择变量。

当您从控制台输入读取值时,您不需要重新声明您只需要设置它的变量。详细说明:

int choice; // declare variable

do
{
    int choice = ...; // re-declare variable
}

在第二行,您要为变量分配一个值,而不是重新声明它,为此您只需替换此行:

int choice = ...

choice = ...
于 2013-02-08T21:00:25.787 回答
1

我遇到的问题是:

“不能在此范围内声明名为'choice'的局部变量,因为它会给'choice'赋予不同的含义,后者已在'父或当前'范围内用于表示其他内容”。

我试着看其他例子

您不应该查看示例,而应查看错误和您的代码。C# 编译器的消息非常人性化,这一点也很清楚。您只需要了解所使用的语言。

无法声明名为“选择”的局部变量

你声明一个像这样的变量: variable-type variable-name,它发生在错误的行,在你的do-loop 中:

int choice = Convert.ToInt32(Console.ReadLine());

在这里,int声明变量,即int它的类型。删除int将使该行成为assignment,这是您所需要的。的结果Convert.ToInt32(Console.ReadLine())被分配 (=) 给 -choice变量。您只能在声明变量后对其进行分配,但您已经在代码的前面完成了该操作。所以错误说:

因为它会给'选择'赋予不同的含义,它已经在'父或当前'范围中用于表示其他东西

如果你在你的代码中查找,你会看到在父作用域(in static void Main())中声明了一个同名的变量:

int choice;

现在您应该知道您只需要声明一个变量一次,并且这通常最好在尽可能小的范围内完成。在您的情况下,您可以简单地删除intbefore int choice = Convert.ToInt32(Console.ReadLine());,因为您还需要在-loopchoice之外访问。do

于 2013-02-08T21:06:15.813 回答
0

尝试将选择变量声明排除在循环范围之外。像这样:

   int choice;

   do
    {
        Console.WriteLine("Hi! This is a temperatue app");
        Console.WriteLine("Press 1 for C to F or 2 for F to C");
        //take the user input
        choice = Convert.ToInt32(Console.ReadLine());


        if (choice == 1)
        {
            Console.WriteLine("Great, you chose C to F. Now enter the temp.");
            int celcius = Convert.ToInt32(Console.ReadLine());
            //next line use the formula and show answer
        }
        if (choice == 2)
        {
            Console.WriteLine("Great, you chose F to C. Now enter the temp.");
            int fahrenheit = Convert.ToInt32(Console.ReadLine());
            //next line use the formula and show answer
        }
        else
            Console.WriteLine("That is not the right choice.");
            //In this way, keep asking the person for either 1 or two

    }
    while (choice != 1 || choice != 2);

    Console.ReadLine();
}

}

于 2013-02-08T20:58:41.407 回答
0

您不能有一个与另一个局部变量同名的局部变量。您可以拥有一个与更大的非局部范围(例如类成员)的变量同名的局部变量,但在这种情况下,局部变量隐藏了更大范围的变量。

你要做的是把int第二个拿掉choice。你不需要重新声明它,你只想分配它。

choice = Convert.ToInt32(Console.ReadLine());
于 2013-02-08T20:59:24.977 回答