Правильная ли такая проверка на ввод чисел? - C#
Формулировка задачи:
Велосипед, думаю, вряд ли придумал?
Задача: ввести любое (целое или десятичное) число, кроме 0.
Очень интересно как бы поступили ПРОФИ при решении этой задачи?
В зависимости от того какие нужно вводить значения, легко убирается не нужное условие из кода ниже:
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("");
- double n = 0;
- string str;
- int i = 0;
- bool mark1 = false;
- int mark2 = 0;
- int mark3 = 0;
- Console.Write("Введите ЛЮБОЕ число, КРОМЕ 0: ");
- str = Console.ReadLine();
- do
- {
- if (str != "" && str != " ") //Проверка от "пустого" нажатия клавишь ИНТЕР или ПРОБЕЛ
- {
- switch (str[i])
- {
- case '-':
- mark2++;
- //Проверка на знак '-'
- if (str[0] != '-' || mark2 == 2 || str.Length == 1)
- {
- Console.Write("Ввод не удался! Повторите попытку: ");
- str = Console.ReadLine();
- i = -1;
- mark1 = false;
- mark2 = 0;
- mark3 = 0;
- } break;
- case ',':
- mark3++;
- //Проверка на десятичные значения
- if (str[0] == ',' || mark3 == 2)
- {
- Console.Write("Ввод не удался! Повторите попытку: ");
- str = Console.ReadLine();
- i = -1;
- mark1 = false;
- mark2 = 0;
- mark3 = 0;
- }
- break;
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': mark1 = true; break;
- case '0':
- //Проверка на исключение значения = 0
- if (i + 1 == str.Length && mark1 == false)
- {
- Console.Write("Ввод не удался! Повторите попытку: ");
- str = Console.ReadLine();
- i = -1;
- mark1 = false;
- mark2 = 0;
- mark3 = 0;
- }
- break;
- default:
- Console.Write("Ввод не удался! Повторите попытку: ");
- str = Console.ReadLine();
- i = -1;
- mark1 = false;
- mark2 = 0;
- mark3 = 0;
- break;
- }
- }
- else
- {
- Console.Write("Ввод не удался! Повторите попытку: ");
- str = Console.ReadLine();
- i = -1;
- mark1 = false;
- mark2 = 0;
- mark3 = 0;
- }
- i++;
- } while (i < str.Length || str == "" || str == " ");
- n = Convert.ToDouble(str);
- Console.Write("Вы ввели число: {0}\n\n", n);
- Console.Write("\nДля выхода нажмите любую клавишу . . . ");
- Console.ReadKey();
- }
- }
Решение задачи: «Правильная ли такая проверка на ввод чисел?»
textual
Листинг программы
- static void Main(string[] args)
- {
- double N;
- while (!double.TryParse(Console.ReadLine(), out N) || (N == 0)) { }
- Console.WriteLine(N);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д