Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在'内声明变量;while循环';但是可以';在循环过程中不改变值_C#_Variables_Loops_While Loop_Scope - Fatal编程技术网

C# 在'内声明变量;while循环';但是可以';在循环过程中不改变值

C# 在'内声明变量;while循环';但是可以';在循环过程中不改变值,c#,variables,loops,while-loop,scope,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

我正在尝试使这个循环工作,以便它将继续要求一个数字,直到用户输入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!");

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

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

此外,当您第一次初始化它时,请确保为其指定一个值

示例:

int num = 0;

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

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

此外,当您第一次初始化它时,请确保为其指定一个值

示例:

int num = 0;

问题是您使用
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!");

问题是您使用
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!");

您试图声明两个同名的不同变量。与其声明第二个,不如使用您已经声明的(在第二次使用时去掉
int

。。。
尝试
{

num=Convert.ToInt32(input);//您试图声明两个同名的不同变量。与其声明第二个变量,不如使用您已经声明的变量(第二次使用时去掉
int

。。。
尝试
{

num=Convert.ToInt32(输入);//您有两个同名的int变量。您需要更改另一个,因为您有一个int变量用于输入,它将接受用户分配的数字,另一个int变量负责检测输入的数字是否为999。

您有两个同名的int变量。您需要更改另一个是因为您有一个int变量用于输入,该变量将接受用户分配的号码,另一个int变量负责检测输入的号码是否为999。

除了其他答案外,您还可以这样做,例如:

if (someCondition)
{
     int num = 23;
}
else
{
     int num = 12;
}
但是你不能这样做:

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

因为所有变量都有自己的作用域,如果在外部作用域中定义变量,则无法在内部作用域中定义具有相同名称的新变量。因此,如果只想更新变量的值,则无需再次声明,只需使用简单的赋值。有关详细信息,请参阅文档。

回答,你可以这样做,例如:

if (someCondition)
{
     int num = 23;
}
else
{
     int num = 12;
}
但是你不能这样做:

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


因为所有变量都有自己的作用域,如果在外部作用域中定义变量,则无法在内部作用域中定义具有相同名称的新变量。因此,如果只想更新变量的值,则无需再次声明,只需使用简单赋值。有关详细信息,请参阅文档。

只需删除
int即可num
double声明前面的code>和使用单位化变量num…..在第一行
num
变量应该初始化为某个值才能使用。即使这不是问题,我想编译器也会抱怨只需从第二个前面删除
int
e> num
double declaration…,以及单位化变量num的使用…。在第1行中,
num
变量应该先初始化为某个值,然后才能使用。即使这不是问题,我想编译器也会抱怨希望它们是一样的。@TomCarter,你希望它们是一样的吗?我不明白t、 这似乎表明您希望
num
始终为0。@paqogomez我想他的意思是他希望每次通过循环重新分配它,这更有意义。@TomCarter,如果您将
int
放在变量名前面,您就是在重新定义变量。您不想重新声明,您只想分配val来自输入的ue。@Antonio在注释中提出了一个很好的观点。第一个注释最初需要设置为0。但我希望它们是相同的。@TomCarter,你希望它们是相同的吗?我不明白。这似乎表明你希望
num
始终为0。@paqogomez我想他是说每次都要重新分配它通过循环,这更有意义。@TomCarter,如果您在变量名前加上
int
,您就是在重新声明变量。您不想重新声明,只想从输入中赋值。@Antonio在注释中提出了一个很好的观点。第一个变量最初需要设置为0。