通过Try-Catch块验证C#

时间:2017-05-13 21:08:28

标签: c# validation

我是C#的初学者,我正在尝试使用'尝试并抓住'阻止在用户输入内容时充当验证。它在用户第一次输入无效输入时起作用,但是当用户第二次输入无效输入时系统崩溃。

我尝试通过创建一个bool变量来解决这个问题,该变量设置为true,直到用户输入正确的输入但不是很成功。

主要问题是当用户输入正确的输入时,我不知道如何让系统将bool变量设置为false

C#代码:

while (invalidInput == true)
{
    try
    {
        {
            Console.Write("Landscape Size: ");
            LandscapeSize = Convert.ToInt32(Console.ReadLine());
            Console.Write("Initial number of warrens: ");
            InitialWarrenCount = Convert.ToInt32(Console.ReadLine());
            Console.Write("Initial number of foxes: ");
            InitialFoxCount = Convert.ToInt32(Console.ReadLine());
            Console.Write("Randomness variability (percent): ");
            Variability = Convert.ToInt32(Console.ReadLine());
            FixedInitialLocations = false;
        }
        Sim = new Simulation(LandscapeSize, InitialWarrenCount, InitialFoxCount, Variability, FixedInitialLocations);
    }
    catch
    {
        Console.WriteLine("invalid input!");
        LandscapeSize = Convert.ToInt32(Console.ReadLine());
        InitialWarrenCount = Convert.ToInt32(Console.ReadLine());
        InitialFoxCount = Convert.ToInt32(Console.ReadLine());
        Variability = Convert.ToInt32(Console.ReadLine());
        invalidInput = true;
    }
    invalidInput = false;
}

另外,如果我犯了任何错误,我是新手堆栈溢出的。

所以我的问题是我做错了什么?谢谢

2 个答案:

答案 0 :(得分:3)

您遇到的问题是每次执行循环时 invalidInput 都设置为false - 独立于try-catch块。将它移动到try-block的末尾,这样你就可以确保try-block中的所有代码在设置标志之前不会抛出错误。但是,由于异常很少用于控制流,您应该使用某种控制语句,如 if-statement

答案 1 :(得分:1)

您只需要在invalidInput的末尾将false设置为try block

但是,使用int.TryParse来控制流而不是异常。

int landscapeSize;

Console.Write("Landscape Size: ");
while(!int.TryParse(Console.ReadLine(), out landscapeSize))
{
    Console.Write("Invalid input. Enter landscape size: ");
}

为您的所有输入执行此操作。