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