Ввод только чисел - C#
Формулировка задачи:
Доброго времени суток! Try catch у меня работает,пишет что недопустимый формат строки. То есть если я ввожу символы вместо цифр,то ошибку выдает,но как можно сделать так,чтобы не только выдавало ошибку,а еще и не пускало,что-то вроде как организовано while(ом) у меня. Вариант с goto и функциями знаю,но нужно организовать без них.. Помогите пожалуйста.. Вот код:
using System;
namespace velos
{
class Program
{
static void Main()
{
try
{
double alltime, length, s1, s2, t2,length2,length1;
Console.WriteLine("***Программа для вычисления скорости на первом участке пути***");
Console.WriteLine("Введите пожалуйста значение времени,которое было затраченно на весь путь в часах");
alltime = double.Parse(Console.ReadLine());
while (alltime < 0) { //Проверяем ввод,чтоб было больше нуля
Console.WriteLine("Вы ввели прекрасные данные,но меньше нуля.Введите пожалуйста человеческое значение времени");
alltime = double.Parse(Console.ReadLine());
}
Console.WriteLine("Введите значение скорости на втором участке пути в километрах в час");
s2 = double.Parse(Console.ReadLine());
while (s2 < 0) {
Console.WriteLine("Вы ввели прекрасные данные,но меньше нуля.Введите пожалуйста человеческое значение скорости");
s2 = double.Parse(Console.ReadLine());
}
Console.WriteLine("Введите значение времени,которое было затрачено на второй путь в часах");
t2 = double.Parse(Console.ReadLine());
while (t2 > alltime) //Проверяем ввод,чтоб было больше нуля
{
Console.WriteLine("Время на втором участке пути никак не может быть больше всего времени,которое было затрачено");
t2 = double.Parse(Console.ReadLine());
}
length2 = s2 * t2;//Считаем длину пути на втором участке
Console.WriteLine("Первым действием находим длину пути второго участка:" + length2);
Console.WriteLine("Введите длину всего участка пути в километрах");
length = double.Parse(Console.ReadLine());
while ((length < 0) | (length<length2))
{
Console.WriteLine("Длина пути должна быть больше нуля больше чем длина второго участка пути");
length = double.Parse(Console.ReadLine());
}
length1 = length - length2;
Console.WriteLine("Вторым действием находим длину пути первого участка в километрах:" + length1);
s1 = length1 / (alltime - t2);
Console.WriteLine("Скорость на первом участке пути {0,4} километров в час,что и требовалось найти", s1);
}
catch (FormatException exc)
{
Console.WriteLine(exc.Message);
}
catch (OverflowException e)
{
Console.WriteLine(e.Message);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
}
Ввод только цифр в textBox эту статью читал и две другие,но варианты не совсем подходят мне.. Возможно ли как-то попроще сделать данное ?
Решение задачи: «Ввод только чисел»
textual
Листинг программы
using System;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
double alltime = Input();
Console.WriteLine(alltime);
Console.ReadKey();
}
static double Input()
{
double d;
string current = String.Empty;
ConsoleKeyInfo keyInfo;
while (true)
{
keyInfo = Console.ReadKey();
if ((Char.IsDigit(keyInfo.KeyChar)) || (keyInfo.KeyChar == '-' && current == String.Empty))
current += keyInfo.KeyChar;
else if (keyInfo.KeyChar == ',' && !current.Contains(','))
current += keyInfo.KeyChar;
else if (keyInfo.Key == ConsoleKey.Enter)
{
if (Double.TryParse(current, out d))
{
Console.WriteLine();
break;
}
else
{
Console.WriteLine("\nНеверный ввод");
current = String.Empty;
continue;
}
}
else if (keyInfo.Key == ConsoleKey.Backspace)
current = current.Substring(0, current.Length - 2);
else Console.Write("\b \r" + current);
}
return d;
}
}
}