如何在try catch语句中重新请求输入

本文关键字:新请求 请求 输入 try catch 语句 | 更新日期: 2023-09-27 18:13:52

string l = Console.ReadLine();
try
{
    int.Parse(l);
}
catch (FormatException)
{
    Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
}

如您所见,我要求输入,但如果用户输入一个非整数的答案,如字母"f",catch语句捕获它,但随后再次抛出异常,因为变量"l"仍然等于"f"。帮助吗?

如何在try catch语句中重新请求输入

您可以使用int.TryParse来代替捕获异常。它返回解析是否成功,因此您可以在循环中检查它,直到输入有效,例如

int i;
bool valid = false;
do {
    Console.WriteLine("Enter an int: ");
    string input = Console.ReadLine();
    valid = int.TryParse(input, out i);
} while(! valid);
//use i

您将需要在while循环中使用TryParse(因为您的条件可能失败无数次)。

string l = Console.ReadLine();
int line = 0;
while(!int.TryParse(l, out line))
{
    Console.WriteLine("Try again.");
    l = Console.ReadLine();
}
// line contains a valid number here.

不要那样做。使用TryParse代替

        string l = Console.ReadLine();
        int i;
        while(int.TryParse(l, out i) == false)
        {
            Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
            l = Console.ReadLine();
        }

有很多方法可以处理这个问题。一种方法是将所有这些都包装在一个循环中,允许给定次数的重试,或者只是一个while循环,直到用户输入有效的输入。另一种方法是将其全部放在一个方法中,然后从catch块递归地调用它。我认为最好的解决方案是两者都不是,而是我将使用Int.TryParse,我将在while循环中,如;

 while (!Int32.TryParse(input, out line))
 {
      Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
      input = Console.ReadLine();
 }