【问题标题】:questions on clock(),time() and difftime() in time.h?time.h 中关于clock()、time() 和difftime() 的问题?
【发布时间】:2016-02-08 13:11:05
【问题描述】:
int fib(int n,int a,int b){
    if (n==2){
        return a+b;
    }
    return fib(n-1,b,a+b);

}

int main() {
    time_t begin,end;
    begin = clock();
    fib(10000,0,1);
    end = clock();
    printf("%f",difftime(end,begin));
}




int main() {
    time_t begin,end;
    time(&begin);
    fib(10000,0,1);
    time(&end);
    printf("%f",(double)(end-begin)/CLOCKS_PER_SEC);
}

1)第一个问题 为什么我的第一个主要给我打印了一个时间288.000000,我假设这是 288 毫秒,但在文档中它应该在几秒钟内给我结果。顺便说一下,我在 Mac 上。

2)第二个问题 为什么第二个主要。 为什么这会打印输出时间为0.000000。 我知道 time() 给了我一个 time_t 结构,我把它放在 beginend time_t 结构中,然后我发现以秒为单位的差异,似乎不起作用。

【问题讨论】:

  • 您能解释一下您的预期输出是什么吗?您是否尝试在不同时间之间打印秒数?
  • 我期待像 0.000198 这样的东西,因为像 200.000000 这样的东西意味着 200 秒是错误的,0.000000 也是错误的。
  • 是的,我正在尝试获取两个不同时间之间的秒差。

标签: c time time.h


【解决方案1】:

clock() 的返回类型是 clock_t - 不一定是秒。 Apple : clock。它测量 CPU 使用的滴答数 (CLOCKS_PER_SEC)。该值不一定是毫秒或秒。

time() 返回自特定时间点 (1/1/1970) 以来的整秒数。

因此快速连续调用两次 time 会导致相同的整秒数。

difftime 期望 time_ttime() 的返回类型)作为其参数并创建一个经过的时间(以秒为单位)。

因此调用clock_t 值是不正确的。

【讨论】:

    【解决方案2】:

    是的,我正在尝试获取两个不同时间之间的秒差。

    您可以尝试以下方法:

    #include <stdio.h>
    #include <time.h>
    
    
    void timeCheck(int *clock,int *minutes){
        int hour ;
        int minute ;
        time_t end, start;
        double diff;
        size_t seconds;
    
    
        start = (time_t)((clock[0] * 60 + clock[1]) * 60) ;
        end = (time_t)((minutes[0] * 60 + minutes[1]) * 60) ;
    
        if( end < start ){
            end += 24 * 60 * 60 ;
        }
    
        diff = difftime(end, start);
    
        hour = (int) diff / 3600;
        minute = (int) diff % 3600 / 60;
        printf("The difference is %d:%d\n", hour, minute);
        seconds = (size_t)(hour * 3600) + (size_t)(minute * 60);
        printf("Seconds = %zu\n",seconds);
    }
    
    int main(void) {
        int hour[] = {22,20};
        int minutes[] = {5,40};
    
        printf("Start time %d:%d\n",hour[0],hour[1]);
        printf("End time %d:%d\n\n",minutes[0],minutes[1]);
    
        timeCheck(hour,minutes);
        return 0;
    }
    

    输出:

    Start time 22:20
    End time 5:40
    
    The difference is 7:20
    Seconds = 26400
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2011-11-12
      • 2014-03-25
      相关资源
      最近更新 更多