Здесь есть пара проблем. Основным является то, что Fahrenheit
необходимо объявить вне блока try
, так как вы используете его вне этого блока (переменные попадают в область, в которой они объявлены). Перемещение его туда, где вы определяете celsius
, кажется логичным, хотя обычно лучше объявить переменные в самой необходимой области.
Во-вторых, вы должны использовать метод int.TryParse
для проверки ввода пользователя, а не блока try/catch
. Он работает намного лучше и чище, более намеренный код. Прочитайте ответ на этот вопрос для получения дополнительной информации.
Этот метод возвращает true
в случае успеха и принимает string
для анализа (мы используем возвращаемое значение Console.ReadLine()
непосредственно ниже) и параметр out
, который будет установлен в преобразованное целое число, если успешный.
Эти изменения могут выглядеть примерно так:
private static void Main(string[] args)
{
int celsius;
Console.WriteLine("Hello! Welcome to the sauna!\n");
do
{
// Use a loop with TryParse to validate user input; as long as
// int.TryParse returns false, we continue to ask for valid input
int fahrenheit;
do
{
Console.Write("Please enter your desired degrees in Fahrenheit: ");
} while (!int.TryParse(Console.ReadLine(), out fahrenheit));
celsius = FahrenheitToCelsius(fahrenheit);
// Rest of loop code omitted...
} while (celsius < 73 || 77 < celsius);
Console.ReadLine();
}