我如何让try catch留在try catch中

问题描述 投票:0回答:1

当我写一些像“tre”而不是整数的东西时,try catch 会写出,但然后它会继续 while 循环。当我写一些不是整数的东西时,如何让它保持在 try catch 中?

    private static double FahrToCels(int f)
    {
        double fahrenheit = f;
        double celsius = (fahrenheit - 32) * 5 / 9;
        return celsius;
    }


    private static void Main(string[] args)
    {
        int fahrenheit = 0;
        double celsius = 0;

        Console.WriteLine("Hej och välkommen till bastun!");


        Console.Write("Skriv in en temperatur i Fahrenheit: ");
        try
        {
            fahrenheit = int.Parse(Console.ReadLine());//Användaren skriver in ett värde som lagras i Fahrenheit
        }
        catch
        {
            Console.WriteLine("Ogiltig inmatning! Ange temperaturen i heltal: ");
        }
        celsius = FahrToCels(fahrenheit);//I variabeln celsius finns antal grader omvandlat från Fahrenheit till Celsius
        celsius = Math.Round(celsius, 0);


        while (celsius < 73 || celsius > 77)
        {
            if (celsius < 73)//Om användaren anger en för låg temperatur sker det inom måsvingarna
            {
                Console.WriteLine("Temperaturen är för låg!");
                Console.Write("Ange en högre temperatur: ");
                fahrenheit = int.Parse(Console.ReadLine());//Användaren får skriva in ett nytt värde som sparas i variabeln fahrenheit
                celsius = FahrToCels(fahrenheit);//I variabeln celsius finns antal grader omvandlat från Fahrenheit till Celsius
                celsius = Math.Round(celsius, 0);
            }
            else if (celsius > 77)//Om användaren anger en för hög temperatur sker det inom måsvingarna
            {
                Console.WriteLine("Temperaturen är för hög!");
                Console.Write("Ange en lägre temperatur: ");
                fahrenheit = int.Parse(Console.ReadLine());//Användaren får skriva in ett nytt värde som sparas i variabeln fahrenheit
                celsius = FahrToCels(fahrenheit);//I variabeln celsius finns antal grader omvandlat från Fahrenheit till Celsius
                celsius = Math.Round(celsius, 0);
            }
        }

c# while-loop try-catch
1个回答
1
投票

您似乎想继续询问用户,直到给出有效的整数。你可以在循环中完成它:

private static int ReadFahrenheit() {
  while (true) {
    Console.WriteLine("Please, provide temperature in Fahrenheit");

    if (!int.TryParse(Console.ReadLine(), out int result))
      Console.WriteLine("Not a valid integer, please, try again");
    else if (result < -459)
      Console.WriteLine("Not a valid value, please, try again");
    else
      return result; 
  }
}

然后你就可以像这样简单地使用它

private static void Main(string[] args)
{
    int fahrenheit = ReadFahrenheit();
    ...
© www.soinside.com 2019 - 2024. All rights reserved.