在控制台应用程序中使用秒表

时间:2019-02-28 10:05:45

标签: c# timespan stopwatch

我想在C#控制台中制作一个简单的秒表。当您按S键时,将启动秒表,而按Q键将使秒表停止。最后,经过的时间将以Hours:Min:Sec显示。到现在为止,秒表都已启动,但停止时却无法获得经过的时间。

SELECT
quotes.ID,max(feedbacks.submitted_at) as submitted_at,buyer_name
FROM quotes 
INNER JOIN feedbacks
ON quotes.id = feedbacks.quote_id
group by quotes.ID,buyer_name

这是输出:

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

3 个答案:

答案 0 :(得分:3)

您错过了一个循环。您可能按“ 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();
    }

希望这会有所帮助:)

答案 1 :(得分:1)

这有点作业,但是:

您的主要问题不是您的代码无法“工作”,而是您可以直接遍历代码的整个秒表部分。您没有循环来重复获取用户输入的内容,因此从本质上讲,用户最初输入的内容并不重要。尝试一下,在switch语句之后再睡一秒钟System.Threading.Thread.Sleep(1000),然后输入各种用户输入。

我建议您查看do while循环,以使您的用户输入被重复接受。原则上,如果您能弄清楚如何循环输入,则代码的每个部分都可能起作用。

P.S。我不明白您为什么要用2来除以毫秒。这将在以后使您头疼。

答案 2 :(得分:-1)

您可以执行以下操作:

    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;
        }
    }