Правильная ли такая проверка на ввод чисел? - C#

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

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

Велосипед, думаю, вряд ли придумал? Задача: ввести любое (целое или десятичное) число, кроме 0. Очень интересно как бы поступили ПРОФИ при решении этой задачи? В зависимости от того какие нужно вводить значения, легко убирается не нужное условие из кода ниже:
Листинг программы
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Console.WriteLine("");
  6. double n = 0;
  7. string str;
  8. int i = 0;
  9. bool mark1 = false;
  10. int mark2 = 0;
  11. int mark3 = 0;
  12. Console.Write("Введите ЛЮБОЕ число, КРОМЕ 0: ");
  13. str = Console.ReadLine();
  14. do
  15. {
  16. if (str != "" && str != " ") //Проверка от "пустого" нажатия клавишь ИНТЕР или ПРОБЕЛ
  17. {
  18. switch (str[i])
  19. {
  20. case '-':
  21. mark2++;
  22. //Проверка на знак '-'
  23. if (str[0] != '-' || mark2 == 2 || str.Length == 1)
  24. {
  25. Console.Write("Ввод не удался! Повторите попытку: ");
  26. str = Console.ReadLine();
  27. i = -1;
  28. mark1 = false;
  29. mark2 = 0;
  30. mark3 = 0;
  31. } break;
  32. case ',':
  33. mark3++;
  34. //Проверка на десятичные значения
  35. if (str[0] == ',' || mark3 == 2)
  36. {
  37. Console.Write("Ввод не удался! Повторите попытку: ");
  38. str = Console.ReadLine();
  39. i = -1;
  40. mark1 = false;
  41. mark2 = 0;
  42. mark3 = 0;
  43. }
  44. break;
  45. case '1':
  46. case '2':
  47. case '3':
  48. case '4':
  49. case '5':
  50. case '6':
  51. case '7':
  52. case '8':
  53. case '9': mark1 = true; break;
  54. case '0':
  55. //Проверка на исключение значения = 0
  56. if (i + 1 == str.Length && mark1 == false)
  57. {
  58. Console.Write("Ввод не удался! Повторите попытку: ");
  59. str = Console.ReadLine();
  60. i = -1;
  61. mark1 = false;
  62. mark2 = 0;
  63. mark3 = 0;
  64. }
  65. break;
  66. default:
  67. Console.Write("Ввод не удался! Повторите попытку: ");
  68. str = Console.ReadLine();
  69. i = -1;
  70. mark1 = false;
  71. mark2 = 0;
  72. mark3 = 0;
  73. break;
  74. }
  75. }
  76. else
  77. {
  78. Console.Write("Ввод не удался! Повторите попытку: ");
  79. str = Console.ReadLine();
  80. i = -1;
  81. mark1 = false;
  82. mark2 = 0;
  83. mark3 = 0;
  84. }
  85. i++;
  86. } while (i < str.Length || str == "" || str == " ");
  87. n = Convert.ToDouble(str);
  88. Console.Write("Вы ввели число: {0}\n\n", n);
  89. Console.Write("\nДля выхода нажмите любую клавишу . . . ");
  90. Console.ReadKey();
  91. }
  92. }

Решение задачи: «Правильная ли такая проверка на ввод чисел?»

textual
Листинг программы
  1. static void Main(string[] args)
  2. {
  3.     double N;
  4.     while (!double.TryParse(Console.ReadLine(), out N) || (N == 0)) { }
  5.     Console.WriteLine(N);
  6. }

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


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

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

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

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

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

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