Правильная ли такая проверка на ввод чисел? - 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);
}