我是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;
}
另外,如果我犯了任何错误,我是新手堆栈溢出的。
所以我的问题是我做错了什么?谢谢
答案 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: ");
}
为您的所有输入执行此操作。