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

时间:2013-05-15 20:39:38

标签: c#

string l = Console.ReadLine();

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

正如您所看到的,我已经要求输入,但如果用户输入非整数答案(如字母“f”),则catch语句会捕获它,但之后会再次抛出异常,因为变量“ l“仍然等于”f“。帮助

4 个答案:

答案 0 :(得分:5)

您可以使用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

答案 1 :(得分:3)

你会想要使用带有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.

答案 2 :(得分:2)

不要这样做。请改用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();
        }

答案 3 :(得分:0)

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

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