2013-02-08 37 views
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(); 
     } 
    } 
} 
+0

这里是否失败:'if(choice == 2)'? – Brian 2013-02-08 20:58:20

回答

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

应该读

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

通过将int在第二时间,您声明称为 “选择” 内的另一个变量{}。这个定义与外面的定义相冲突。

+0

非常感谢! – user2054277 2013-02-08 22:20:00

+0

当然。在这里选择你最喜欢的答案,然后点击复选标记。它告诉其他人这个问题已被回答。 – Almo 2013-02-08 22:38:56

+1

True @ user2054277,如果你对其他人也投票赞成,也很有帮助。 – 2013-02-08 22:40:03

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(); 
} 

}

+0

非常感谢! – user2054277 2013-02-08 22:23:13

0

你不能有一个局部变量命名相同的名称,另一个局部变量。你可以有一个局部变量具有相同的名称作为一个较大的非局部作用域(例如类成员)的变量,但在这种情况下,本地变量隐藏较大范围的变量。

你想要做的是从int关闭第二个choice。你不需要重新声明它,你只是想分配它。

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

非常感谢! – user2054277 2013-02-08 22:23:38

1

这一切都在错误消息,你已经在同一个范围内声明的选择变量的两倍。

当你阅读从控制台输入你不需要重新声明变量的值,你只需要设置。为了详细说明:

int choice; // declare variable 

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

在要分配变量的值第二行,没有重新申报的,要做到这一点,你只需要更换这行:

int choice = ... 

随着

choice = ... 
+0

非常感谢! – user2054277 2013-02-08 22:21:11

1

我遇到的问题是:

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

我试图寻找其他的例子

你不应该看的例子,但在错误和你的代码。 C#编译器对消息的使用非常友好,而且这一点也很清楚。你只需要了解使用的语言。

命名为“选择”的局部变量不能声明

声明变量是这样的:variable-type variable-name,这发生在错误的路线,在您do -loop:

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

这里用int声明变量,int是它的类型。删除int将使该行成为您需要的assignmentConvert.ToInt32(Console.ReadLine())的结果被分配(=)到choice-变量。声明后只能分配一个变量,但在代码中早已做过。所以错误说:

,因为它会给予不同的意义,“选择”,这已经是一个“父母或电流”范围用来表示别的

如果你看看在你的代码,你会看到在一个parent scope(在static void Main())具有相同名称声明一个变量:

int choice; 

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

+1

我不同意。它用在他的循环中;在循环体内部做出的声明在那里是不可见的。 – 2013-02-08 21:18:59

+0

@BenVoigt哎呀,错过了。谢谢。 – CodeCaster 2013-02-08 21:41:32

+0

非常感谢您的深入分析。这绝对有助于学习。 – user2054277 2013-02-08 22:22:32

相关问题