Входная строка была не в правильном формате || ConsoleApp - PullRequest
0 голосов
/ 14 января 2019

В основном я пытаюсь не допустить ввода пользователем строки вместо целого числа; но в строке кода:

else if (Convert.ToString(result) == "")

Я получаю ошибку.

Полный код:

class Program
{
    static void Main(string[] args)
    {
        Console.ForegroundColor = ConsoleColor.Red;

        int calcKelvin = 273;
        int calcFahren = 32; 
        int result = Convert.ToInt32(Console.ReadLine());

        if (result == 0)
        {
            Console.WriteLine("Check it up on google!");
            Console.Title = "I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT ||";
        }
        else if (Convert.ToString(result) == "")
        {
            Console.Write("Error, you can not convert a text");
        }
        else 
        { 
            Console.WriteLine("Kelvin = " + calcKelvin * result);
            Console.WriteLine("Fahrenheit = " + calcFahren * result);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Самый безопасный способ получить число из строки - использовать метод TryParse, потому что этот метод возвращает два значения! Фактический тип возвращаемого значения - bool, который указывает, была ли строка успешно преобразована, а другой - параметр out, который относится к типу, в который мы преобразовываем, и который устанавливается в преобразованное значение. (или устанавливается значение по умолчанию для типа, если преобразование не выполняется).

Для температур мы часто имеем дело с десятичными числами, поэтому double, вероятно, является хорошим типом для хранения результата. Итак, мы будем использовать double.TryParse.

Теперь, так как мы не обязательно хотим просто выйти, если пользователь допустил ошибку, мы, вероятно, должны выполнить наше преобразование в цикле, поэтому, если оно завершится неудачно, мы просто попросим пользователя повторить попытку. И поскольку этот код будет использоваться и в других местах, мы можем создать вспомогательный метод, который принимает приглашение, отображаемое для пользователя, и возвращает строго типизированный ответ пользователя:

private static double GetDoubleFromUser(string prompt = null)
{
    double result;

    do
    {
        Console.Write(prompt);
    } while (!double.TryParse(Console.ReadLine(), out result));

    return result;
}

С помощью этого метода мы теперь можем просто объявить double и присвоить его возвращаемому значению метода, описанного выше, например:

double userInput = GetDoubleFromUser("Enter a temperature: ");

Еще одна вещь, которую мы можем исправить в коде, - это формулы, используемые для преобразования. Быстрая проверка онлайн показывает нам, что мы добавляем число для Кельвина и делаем умножение, деление и сложение по Фаренгейту. Мы можем вычислить эти значения на лету, как только мы получим температуру по Цельсию от пользователя:

private static void Main()
{
    double celcius = GetDoubleFromUser("Enter a Celcius temperature: ");

    double fahrenheit = celcius * 9 / 5 + 32;
    double kelvin = celcius + 273.15;

    Console.WriteLine("Kelvin = " + kelvin);
    Console.WriteLine("Fahrenheit = " + fahrenheit);

    GetKeyFromUser("Done! Press any key to exit...");
}

выход

enter image description here

0 голосов
/ 14 января 2019

Convert.ToInt32 выдает исключение, если входная строка не является числом. Чтобы это исправить, вы можете использовать int.TryParse вместо.

Пример:

using System;
class Program
{
static void Main(string[] args)
{

Console.ForegroundColor = ConsoleColor.Red;


int calcKelvin = 273;
int calcFahren = 32; 
int result;
bool isNum=int.TryParse(Console.ReadLine(),out result);

if (!isNum)
{
    Console.Write("Error, you can not convert a text");
}
else if (result == 0)
{
    Console.WriteLine("Check it up on google!");
    Console.Title = "I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT || I'M USELESS CONSOLE, YOU CAN NOW EXIT ||";
}
else { 

Console.WriteLine("Kelvin = " + calcKelvin * result);
Console.WriteLine("Fahrenheit = " + calcFahren * result);
}
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...