首页 > 解决方案 > 用于计算秒数的计时器未正确实施

问题描述

我正在制作一个计时器来计算用户按下 3 之前的秒数,但是程序不起作用,并且整数变量“sec”中没有保存任何值。我哪里错了?我已经包含 windows.h 和 ctime.h 这是代码:

       void func(){
       int sec=0
       cout<<"Press 3 to end Timer";
                cin>>t;
                
                while(t!=3){
                Sleep(1);
                sec++;}
                
                if(t==3)
                {
                    cout<<"Timer ended";
                }

}

标签: c++

解决方案


这是因为 cin >> t 阻塞。也就是说,在输入完成之前,执行不会移动到您的 while 循环。

像这样的东西会起作用:

#include <chrono>

// This is just to make the example cleaner.
using namespace chrono;

...

system_clock::time_point startTime = system_clock::now();

cin >> t;

system_clock::time_point endTime = system_clock::now();
milliseconds duration = time_point_cast<milliseconds>(endTime - startTime);

此时,duration.count() 是等待输入所花费的毫秒数。你可以做一些数学运算把它变成秒,或者你可以像这样使用秒:

seconds duration = time_point_cast<seconds>(endTime - startTime);

但在这种情况下,2.9 秒将显示为 2 秒(我认为)。所以我会这样做来输出它:

cout << "Duration: " << (double)duration.count() / 1000.0 << endl;

或类似的规定。我正在输入这个原始的,所以可能有错别字。


推荐阅读