Использование секундомера в консольном приложении - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу сделать простой секундомер в консоли C #.Когда вы нажимаете клавишу S, вы запускаете секундомер и клавишу Q, чтобы остановить секундомер.И в конце прошедшее время будет отображаться в часах: мин: сек.До сих пор секундомер запускается, но когда он останавливается, он не получает истекшее время.

static void Main(string[] args)
{
    Console.WriteLine("The stopwatch, press S to begin and Q to stop");
    var UserInput = Console.ReadLine();
    System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
    stopWatch.Start();

    switch (UserInput)
    {
        case "s":
            stopWatch.Start();;
            break;
        case "q":
            stopWatch.Stop();

            break;
        default:
            Console.WriteLine("You did something wrong");
            break;
    }

    // Get the elapsed time as a TimeSpan value.
    TimeSpan ts = stopWatch.Elapsed;

    // Format and display the TimeSpan value. 
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 2);
    Console.WriteLine("RunTime " + elapsedTime);

    Console.ReadLine();
}

Это вывод:

https://i.stack.imgur.com/VKtCQ.png

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Вам не хватает петли.Вы, вероятно, нажимаете 's', чтобы начать, и когда вы нажимаете 'q', вы фактически нажимаете последнюю Console.ReadLine ()

Если вы добавляете цикл, все работает:

    static void Main(string[] args)
    {
        Console.WriteLine("The stopwatch, press S to begin and Q to stop");
        System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
        stopWatch.Start();

        var done = false;

        while (!done)
        {
            var UserInput = Console.ReadLine();

            switch (UserInput)
            {
                case "s":
                    stopWatch.Start();
                    break;
                case "q":
                    stopWatch.Stop();
                    done = true;
                    break;
                default:
                    Console.WriteLine("You did something wrong");
                    break;
            }
        }

        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;

        // Format and display the TimeSpan value. 
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 2);
        Console.WriteLine("RunTime " + elapsedTime);

        Console.ReadLine();
    }

Надеюсь, это поможет:)

0 голосов
/ 28 февраля 2019

Вы можете сделать что-то вроде этого:

    static void Main(string[] args)
    {
        Console.WriteLine("The stopwatch, press S to begin and Q to stop");
        var UserInput = Console.ReadLine();
        System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
        stopWatch.Start();


    Decide:
        switch (UserInput.ToLower())
        {
            case "s":
                stopWatch.Start();

                while (!Console.KeyAvailable)
                {
                    // Get the elapsed time as a TimeSpan value.
                    TimeSpan ts = stopWatch.Elapsed;
                    Console.Clear();
                    // Format and display the TimeSpan value. 
                    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                        ts.Hours, ts.Minutes, ts.Seconds,
                        ts.Milliseconds / 2);
                    Console.WriteLine("RunTime " + elapsedTime);
                    Thread.Sleep(1000);
                }

                UserInput = Console.ReadLine();
                if (UserInput.ToLower() != "q")
                {
                    goto Decide;
                }
                break;
            case "q":
                stopWatch.Stop();

                break;
            default:
                Console.WriteLine("You did something wrong");
                break;
        }
    }
0 голосов
/ 28 февраля 2019

Это пахнет домашней работой, но:

Ваша главная проблема не в том, что ваш код не будет «работать», а в том, что вы летите прямо через всю часть кода секундомера.У вас нет петли для повторного ввода пользовательского ввода, поэтому, по сути, не имеет значения, какой ввод имеет ваш пользователь.Попробуйте, включите режим ожидания после вашего оператора switch на секунду System.Threading.Thread.Sleep(1000), а затем введите различные пользовательские данные.

Я рекомендую вам просмотреть циклы do while, чтобы ваш пользовательский ввод был повторно принят.В принципе, каждый раздел вашего кода, вероятно, будет работать, если вы сможете понять, как циклически вводить данные.

PS Я не понимаю, почему вы делите свои миллисекунды на 2. Это вызовет у вас головную больпозже.

...