Ввод только чисел - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Try catch у меня работает,пишет что недопустимый формат строки. То есть если я ввожу символы вместо цифр,то ошибку выдает,но как можно сделать так,чтобы не только выдавало ошибку,а еще и не пускало,что-то вроде как организовано while(ом) у меня. Вариант с goto и функциями знаю,но нужно организовать без них.. Помогите пожалуйста.. Вот код:
Листинг программы
  1. using System;
  2.  
  3. namespace velos
  4. {
  5. class Program
  6. {
  7. static void Main()
  8. {
  9. try
  10. {
  11. double alltime, length, s1, s2, t2,length2,length1;
  12.  
  13. Console.WriteLine("***Программа для вычисления скорости на первом участке пути***");
  14. Console.WriteLine("Введите пожалуйста значение времени,которое было затраченно на весь путь в часах");
  15. alltime = double.Parse(Console.ReadLine());
  16. while (alltime < 0) { //Проверяем ввод,чтоб было больше нуля
  17. Console.WriteLine("Вы ввели прекрасные данные,но меньше нуля.Введите пожалуйста человеческое значение времени");
  18. alltime = double.Parse(Console.ReadLine());
  19. }
  20. Console.WriteLine("Введите значение скорости на втором участке пути в километрах в час");
  21. s2 = double.Parse(Console.ReadLine());
  22. while (s2 < 0) {
  23. Console.WriteLine("Вы ввели прекрасные данные,но меньше нуля.Введите пожалуйста человеческое значение скорости");
  24. s2 = double.Parse(Console.ReadLine());
  25. }
  26. Console.WriteLine("Введите значение времени,которое было затрачено на второй путь в часах");
  27. t2 = double.Parse(Console.ReadLine());
  28. while (t2 > alltime) //Проверяем ввод,чтоб было больше нуля
  29. {
  30. Console.WriteLine("Время на втором участке пути никак не может быть больше всего времени,которое было затрачено");
  31. t2 = double.Parse(Console.ReadLine());
  32. }
  33. length2 = s2 * t2;//Считаем длину пути на втором участке
  34. Console.WriteLine("Первым действием находим длину пути второго участка:" + length2);
  35. Console.WriteLine("Введите длину всего участка пути в километрах");
  36. length = double.Parse(Console.ReadLine());
  37. while ((length < 0) | (length<length2))
  38. {
  39. Console.WriteLine("Длина пути должна быть больше нуля больше чем длина второго участка пути");
  40. length = double.Parse(Console.ReadLine());
  41. }
  42. length1 = length - length2;
  43. Console.WriteLine("Вторым действием находим длину пути первого участка в километрах:" + length1);
  44. s1 = length1 / (alltime - t2);
  45. Console.WriteLine("Скорость на первом участке пути {0,4} километров в час,что и требовалось найти", s1);
  46.  
  47. }
  48. catch (FormatException exc)
  49. {
  50. Console.WriteLine(exc.Message);
  51. }
  52. catch (OverflowException e)
  53. {
  54. Console.WriteLine(e.Message);
  55. }
  56. catch (Exception e)
  57. {
  58. Console.WriteLine(e);
  59. }
  60. }
  61. }
  62. }
Ввод только цифр в textBox эту статью читал и две другие,но варианты не совсем подходят мне.. Возможно ли как-то попроще сделать данное ?

Решение задачи: «Ввод только чисел»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace ConsoleApplication
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             double alltime = Input();
  11.             Console.WriteLine(alltime);
  12.             Console.ReadKey();
  13.         }
  14.  
  15.         static double Input()
  16.         {
  17.             double d;
  18.             string current = String.Empty;
  19.             ConsoleKeyInfo keyInfo;
  20.            
  21.             while (true)
  22.             {
  23.                 keyInfo = Console.ReadKey();
  24.                 if ((Char.IsDigit(keyInfo.KeyChar)) || (keyInfo.KeyChar == '-' && current == String.Empty))
  25.                     current += keyInfo.KeyChar;
  26.                 else if (keyInfo.KeyChar == ',' && !current.Contains(','))
  27.                     current += keyInfo.KeyChar;
  28.                 else if (keyInfo.Key == ConsoleKey.Enter)
  29.                 {
  30.                     if (Double.TryParse(current, out d))
  31.                     {
  32.                         Console.WriteLine();
  33.                         break;
  34.                     }
  35.                     else
  36.                     {
  37.                         Console.WriteLine("\nНеверный ввод");
  38.                         current = String.Empty;
  39.                         continue;
  40.                     }
  41.                 }
  42.                 else if (keyInfo.Key == ConsoleKey.Backspace)
  43.                     current = current.Substring(0, current.Length - 2);
  44.                 else Console.Write("\b \r" + current);
  45.             }
  46.             return d;
  47.         }
  48.     }
  49. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы