Ввод двух чисел и проверка на то, является ли данный символ числом
Есть задача
- Запрос числа 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 шт):
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}", +с);
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);
}