减去秒数作为 C 中的输入

Subtracting and getting seconds as input in C

我有以下代码:

#include <stdio.h>
#include <time.h>

int main(){
    clock_t timerS;
    int i=1, targetTime=2;
    scanf("%d", &targetTime);
    while(i!=0){
        timerS = clock();
        while ((double)((clock() - timerS) / CLOCKS_PER_SEC) < targetTime){
            //do something
        }
        //do another thing but delayed by the given time
        if(targetTime>=0.5)
            targetTime-=0.02;
        else i=0;
    }
    return 0;
}

我想做的是有一个循环,它(最初)为输入的秒数做一些事情,并在 targetTime-seconds 过去后做另一件事。

但是在第一个循环之后,要改变这些操作的速度(在这种情况下更具体地说是 -0.02 秒 ).

一个例子是在 2 秒内从用户那里获取多个用户输入,然后显示在这 2 秒内进行的所有输入。

第一个问题

如果初始给定时间小于1秒(比如0.6秒),其他事情不会延迟0.6秒,而是立即完成。

第二个问题

实际上与第一个类似,如果我从 targetTime 中减去 0.02 秒(在本例中),它会再次立即执行另一件事,而不是像我预期的那样在 targetTime-0.02 秒内执行。

我是 C 中这个“时钟”和“时间”主题的新手,所以我想我在应该如何完成这些操作方面做错了。另外,请不要因为上述原因给出过于复杂的explanation/solution

谢谢!

不要使用 clock(2) 系统调用,因为它已过时并且已被独立于机器的替代品完全取代。

如果您的系统支持,您可以使用 clock_gettime(2),这将为您提供纳秒精度(取决于平台,但至少在 linux 英特尔架构上它几乎是保证)或者,如果您不能使用它,至少您将拥有 gettimeofday(2),它源自 BSD 系统,并为您提供微秒分辨率的时钟。

如果你想停止你的程序一段时间,你也有sleep(2)(基于秒)usleep(2)(基于微秒)甚至nsleep(2)(基于纳秒)

无论如何,这些调用中的任何一个都有一个不基于系统心跳的 tick,并且分辨率是统一的并且不依赖于系统。

我错误地将 targetTime 初始化为 int 而不是 double。将其更改为 double 可以轻松解决问题。抱歉!