Ввод двух чисел и проверка на то, является ли данный символ числом

Есть задача

  • Запрос числа 1 (ввод с клавиатуры)
  • Запрос числа 2 (ввод с клавиатуры)
  • Вывод суммы этих чисел
  • Вынести данный алгоритм в отдельный метод

В случае не валидного ввода данных (любой символ, отличны от числа) – вывод сообщения на экран, о том, что введенный символ не является числом и снова попросить пользователя ввести число. Как реализовать проверку введенных символов?

Console.Write("Введите число 1 "); 
int a = int.Parse(Console.ReadLine()); 
Console.Write("Введите число2 "); 
int b = int.Parse(Console.ReadLine()); 
int с = a + b; 
Console.WriteLine("Сумма чисел = {0}", +с);

Ответы (2 шт):

Автор решения: Blackmeser
input1:
Console.Write("Введите число 1 ");
bool check_a = int.TryParse(Console.ReadLine(), out int a);
if (!check_a) goto input1;
input2:
Console.Write("Введите число2 ");
bool check_b = int.TryParse(Console.ReadLine(), out int b);
if (!check_b) goto input2;
int с = a + b;
Console.WriteLine("Сумма чисел = {0}", +с);
→ Ссылка
Автор решения: Aarnihauta

1. Первое с чего я начал: создал метод, который проверяет введенное значение. Назовем его IsDigitInput(string value). В параметр этот метод будет получать string и проверять его с помощью метода double.TryParse. Такой подход не самый удачный, поскольку double.TryParse нам возвращает помимо проверки само число (если парсинг прошел успешно и строка может быть преобразована в число), но так как Вы только учитесь не стоит забивать голову лишним.

private static bool IsDigitInput(string value)
{
    double number;
    bool isDigit = double.TryParse(value, out number);

    return isDigit;
}

2. Теперь нам нужно получить ввод пользователя. Для этого создадим метод Input(string messageToUser). Результатом выполнения метода будет тип данных double (потому что пользователь может захотеть ввести число с запятой). Параметр messageToUser нужен для вывода на экран.

private static double Input(string messageToUser)
{
    //1. Объявим переменную, в нее будет записано число, если это возможно.
    double number;

    //2. Вводится число с клавиатуры и записывается в переменную value
    Console.Write(messageToUser);
    string value = Console.ReadLine();


    //3. Проверяется введенное значение при помощи ранее созданного метода IsDigitInput
    bool isDigit = IsDigitInput(value);

    //Если метод возвратил нам true
    if (isDigit == true)
    {
        //то парсим полученное с клавиатуры значение value в тип double
        number = double.Parse(value);

        //Возвращаем это число. После этой строки кода метод прервется и мы получим какое-то число в методе Main
        return number;
    }
    //4. Если метод возвратил false
    else
    {
        //Выводим сообщение о том, что ввод некорректный.
        Console.WriteLine("Число было введено не корректно.");
        
        //Возвращаем метод Input. 
        //Метод начнет свое выполнение с самого начала и (т.е перейдет к пункту 1 в этом методе, там где мы number объявили. )
        //Если непонятно, как это работает - погуглите "Рекурсия C#"
        return Input(messageToUser);
    }
}

3. И последний шаг - метод суммирования. Возвращает сумму двух чисел a и b, которые были поданы в аргументы метода

private static double Sum(double a, double b)
{
    return a + b;
}

Перейдем к использованию всего нашего кода следующим образом:

static void Main(string[] args)
{
    //получаем первое значение с клавиатуры (если непонятно как - см. пункт 2)
    double a = Input("Введите первое число: ");
    Console.WriteLine();

    //получаем второе значение с клавиатуры
    double b = Input("Введите второе число: ");
    Console.WriteLine();

    //Выводим результат, который получаем из метода Sum
    double sum = Sum(a, b);
    Console.WriteLine("Результат выполнения: {0}", sum);
}

→ Ссылка