Ввод только чисел - 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;
        }
    }
}

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы