【问题标题】:C# try and catch inside a do whileC# try and catch inside a do while
【发布时间】:2021-04-18 15:18:09
【问题描述】:

我是 C# 和一般编程的初学者。我编写了一个程序,它需要有一个方法、do-while、if-else 和 try-catch。我已经完美地编写了程序并且它也可以正常工作,但是一旦我添加了 try-catch 循环,try 块外部的 fahr 变量开始显示“使用未分配的局部变量”错误( celsius = FahrToCel(fahr)。我附上代码,请有人告诉我它有什么问题。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bastun
{
    class Program
    {
        public static double FahrToCel(int fahr)
        {
            double celsius = (fahr - 32) * 5 / 9; //convert fahrenheit to celsius
            return celsius;
        }

        public static void Main(string[] args)
        { 
            int fahr; //declaring variable for temperature in fahrenheit
            double celsius = 0; //declaring variable for temperature in celsius
            do //start loop
            {
                Console.WriteLine("What is the current temperature of the sauna?"); //show message on screen

                try
                {
                    fahr = Convert.ToInt32(Console.ReadLine()); //read the value of Fahrenheit and convert to int
                }
                catch
                {
                    Console.WriteLine("Wrong input format. Please try again and input a number."); //error message to be shown in case wrong value is entered
                continue;
}

                celsius = FahrToCel(fahr); //calling the method

                if (celsius < 73) //show message if entered temperature is less than 73 celsius
                {
                    Console.WriteLine("Sauna is cold. Raise temperature.");
                }
                else if (celsius > 77) //show message if entered temperature is more than 77 celsius
                {
                    Console.WriteLine("Sauna is too hot. Lower temperature.");
                }
                else if (celsius > 73 && celsius < 77) //show message if entered temperature is in between 73 and 77 celsius
                {
                    Console.WriteLine("Sauna is perfectly warm. Enjoy!");
                }
                else if (celsius == 75) //show message if entered temperature is equal to 75 celsius
                {
                    Console.WriteLine("Optimal temperature achieved. Enjoy!");
                }
            }
            while (celsius < 73 || celsius > 77); //continue loop if temperature is less than 73 or more than 77 celsius
            Console.ReadKey();
            

        }
    }
}

编辑:这个问题现在已经解决,因为我对编码进行了一些更改,但另一个问题已经出现。当用户输入 164 或 165 华氏度(73、74 摄氏度)时,程序现在不显示任何消息。此外,当温度为 75 摄氏度时,它没有显示应显示的消息,而是显示 73-77 摄氏度的消息。

【问题讨论】:

  • 在声明时用一个值初始化 fahr,例如0 -> int fahr = 0;
  • 这又产生了一个问题。如果用户在程序中输入了无效的格式,它会显示编程的 catch 错误消息,就像它应该的那样,但如果输入的温度太低,它也会显示它需要显示的消息。我认为这是因为我已经预先声明 fahr 为 0,这是一个低值。
  • 有两个条件 = 是你在最后一次打印时没有考虑的,你甚至可以避免最后一个 else if,并且只将它设置为 ELSE,那就是当没有其他任何一个时IFs Elses 下降。
  • 做到了!谢谢!

标签: c# if-statement try-catch do-while


【解决方案1】:

如果 try 块出现问题,则不会退出 do 块。在这种情况下,所有剩余代码都使用未分配的 fahr 变量执行。

要中止当前迭代并继续循环,请在 catch 块中使用 continue 指令,例如

catch
{
    Console.WriteLine("Wrong input format. Please try again and input a number."); 
    continue;
}

【讨论】:

  • 做到了!但是我仍然将摄氏度的值声明为 0。据我所知,该程序现在运行良好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多