C# try and catch inside a do while
C# try and catch inside a do while
我是 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 摄氏度的消息。
如果 try 块出现问题,do 块不会退出。在这种情况下,所有剩余代码都使用未分配的 fahr 变量执行。
要中止当前迭代并继续循环,请在 catch 块中使用 continue 指令,如
catch
{
Console.WriteLine("Wrong input format. Please try again and input a number.");
continue;
}
我是 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 摄氏度的消息。
如果 try 块出现问题,do 块不会退出。在这种情况下,所有剩余代码都使用未分配的 fahr 变量执行。
要中止当前迭代并继续循环,请在 catch 块中使用 continue 指令,如
catch
{
Console.WriteLine("Wrong input format. Please try again and input a number.");
continue;
}