2
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

4 回答 4

6

您可以使用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
于 2013-05-15T20:42:38.477 回答
3

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

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.
于 2013-05-15T20:43:35.253 回答
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();
        }
于 2013-05-15T20:41:26.183 回答
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();
 }
于 2013-05-15T20:43:16.640 回答