【问题标题】:How do I include a variable in the condition of a while loop if the variable is changed inside said loop in c#如果变量在 c# 中的所述循环内更改,如何在 while 循环的条件中包含变量
【发布时间】:2020-09-09 23:35:25
【问题描述】:

我试图让用户输入一个从 1 到 5 的数字,如果不在这些范围内,我想循环返回并让用户输入另一个数字。代码如下:

int charNum = 0;

while(!((charNum > 0) && (charNum < 6)) ) {

    int charNum = Convert.ToInt32(Console.ReadLine());
            
}

上面给出了一个错误:

“无法在此范围内声明名为 'charNum' 的本地或参数,因为该名称在封闭的本地范围中用于定义本地或参数”

我尝试合并多个变量,但似乎在循环内更改变量时遇到了同样的问题。

有没有办法解决这个问题,还是我错过了更简单的解决方案?

【问题讨论】:

    标签: c# variables


    【解决方案1】:

    您应该从不使用Convert风格的方法并且总是使用TryParse风格的方法用户输入...小手指脏的用户会输入错误的东西...

    这是一个示例,它完成了上述所有操作,并且您的范围检查在一行中,并带有一条失败的用户消息

    int charNum = 0;
    
    while(!int.TryParse(Console.ReadLine(), out charNum ) || charNum < 0 || charNum >= 6) 
      Console.WriteLine("You had one job, now enter the number correctly");
    

    【讨论】:

    • 感谢您澄清这一点,这是我决定让我未来的自己弄清楚的事情
    • 只是为了增加一点额外的谨慎,我发现使用 double.TryParse 然后在需要时转换为 int 会更安全。如果用户包含小数点,int.TryParse 将失败。
    【解决方案2】:

    您正试图在循环内创建另一个与循环外变量同名的变量。您只需为变量分配一个值,而不是声明它。

    int charNum = 0;
    
    while(!((charNum > 0) && (charNum < 6)) ) {
    
        charNum = Convert.ToInt32(Console.ReadLine());
                
    }
    

    编辑

    我还会查看帖子 above,因为它可以很好地了解在这种情况下不应该做什么。

    【讨论】:

      【解决方案3】:

      这是一个非常简单的错误。您正在尝试在循环内重新声明 charNum 变量。只需删除 int,它就会变成赋值而不是声明。

      【讨论】:

        猜你喜欢
        • 2013-09-13
        • 2014-02-07
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 2018-06-10
        • 2019-08-01
        相关资源
        最近更新 更多