小的编码项目不捕获FormatException

本文关键字:FormatException 项目 编码 | 更新日期: 2023-09-27 18:13:36

所以我最近开始了我的第一个c#编码课程。我目前正试图写一个简短的程序,打印出耶!跟我说的一样多。现在,为了防止任何格式异常,我尝试添加一个try和catch。但是,由于某种原因,这不起作用,我似乎不知道为什么。代码如下:

  Console.Write("Enter the number of times to print '"Yay!'": ");
  string entry = Console.ReadLine();
  var number = int.Parse (entry);
  bool print = true;
  while(print)
  {
    try
    {
      if(number <= 0)
      {
        print = false;
      }
      else
      {
        Console.WriteLine("Yay!");
        number -= 1;
      }
    }
    catch(FormatException)
    {
      Console.WriteLine("You must enter a whole number.");
    }
  } 

据我所知,我已经拥有了完成这项工作所需的一切。有人知道我做错了什么吗?

感谢您的阅读!

小的编码项目不捕获FormatException

 var number = int.Parse (entry);

应该抛出异常,并且由于超出 try {}作用域,因此异常未被捕获。将片段移动到作用域:

  Console.Write("Enter the number of times to print '"Yay!'": ");
  string entry = Console.ReadLine();
  bool print = true; 
  try {      
    // int.Parse is within the try {} scope now
    var number = int.Parse (entry);
    while(print) {
      ...
    }
  }
  catch(FormatException) {
    Console.WriteLine("You must enter a whole number.");
  }

或将int.Parse转化为int.TryParse,并完全放弃try {...} catch {...}(较好的溶液)

  Console.Write("Enter the number of times to print '"Yay!'": ");
  int number;
  if (!int.TryParse(Console.ReadLine(), out number)) {
    Console.WriteLine("You must enter a whole number.");
    return;
  }
  bool print = true;
  // There's no need in try {} catch {} now
  while(print) {
    ...
  }

您需要将int.Parse放置在try-catch块中。

这是你的代码的修改版本。

    static void Main(string[] args)
    {            
        bool print = true;
        while (print)
        {
            Console.Write("Enter the number of times to print '"Yay!'": ");
            string entry = Console.ReadLine();
            try
            {
                var number = int.Parse(entry);
                for (int i = 0; i < number; i++)
                {
                    Console.WriteLine("Yay!");
                }
            }
            catch (FormatException)
            {
                Console.WriteLine("You must enter a whole number.");
            }
        }
    }