在'while循环'中声明变量但在循环期间不能更改值

时间:2014-02-25 23:19:19

标签: c# variables loops while-loop scope

我正在尝试使这个循环工作,所以它会一直询问一个数字,直到用户输入999.但是对于这个版本的代码,它不会构建说我不能在循环中声明num因为我在这个范围内赋予它不同的含义。

由于我对这段代码的分配规则,使用了try和catch。

int num;
while (num != 999)
{
    Console.WriteLine("Enter a number between 0 and 99");
    string input = Console.ReadLine();
    try
    {
        int num = Convert.ToInt32(input);
        Console.WriteLine("This is element number " + num + " : " + randNums[num]);
    }
    catch
    {
        Console.WriteLine("Data inputted is not between 0 and 99");
    }
}
Console.WriteLine("You chose the secret value, well done!");

5 个答案:

答案 0 :(得分:2)

您在同一范围内定义了两次int num。更改其中一个的名称。循环中的那个是无效的,因为你已经定义了一个。

或者,如果要重新分配相同的变量,可以从内部删除int。这样它每次都会用新值覆盖它。

第一次初始化时,请务必为其指定值。

示例:

int num = 0;

答案 1 :(得分:2)

问题是你用int num声明变量两次。您不需要在循环中重新声明变量,只需指定它:

int num = 0; // initialized num to 0 here
while (num != 999)
{
    Console.WriteLine("Enter a number between 0 and 99");
    string input = Console.ReadLine();
    try
    {
        num = Convert.ToInt32(input); // Changed int num to num here
        Console.WriteLine("This is element number " + num + " : " + randNums[num]);
    }
    catch
    {
        Console.WriteLine("Data inputted is not between 0 and 99");
    }
}
Console.WriteLine("You chose the secret value, well done!");

答案 2 :(得分:1)

除了其他答案,您可以执行此操作,例如:

if (someCondition)
{
     int num = 23;
}
else
{
     int num = 12;
}

但你不能这样做:

int num = 12;
if(someCondition)
{
   int num = 23;
}

因为所有变量都有自己的范围,并且如果在外部范围内定义变量,则无法在inner-scope中定义具有相同名称的新变量。如果您只想更新变量,您不需要再次声明它,只需使用简单的赋值。有关详细信息,请参阅Compiler Error CS0136文档。

答案 3 :(得分:0)

您正在尝试声明2个同名的不同变量。而不是声明第二个,只需使用您已声明的那个(在第二次使用时取消int)。

...
    try
    {
        num = Convert.ToInt32(input); // <-- Using existing declaration here
        Console.WriteLine("This is element number " + num + " : " + randNums[num]);
    }
...

答案 4 :(得分:0)

您有两个具有相同名称的int变量。您需要更改另一个,因为您的输入的int变量将接受用户指定的数字,另一个int变量负责检测输入的数字是否为999.