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