Правильная ли такая проверка на ввод чисел? - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д