关于time.h中的clock(),time()和difftime()的问题?

时间:2015-11-07 12:40:48

标签: c time time.h

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上。 / p>

2)第二个问题 为什么第二个主要。 为什么打印输出时间为0.000000。 我知道time()给了我一个time_t结构,我把它放在beginend time_t结构中,然后我找到了几秒钟的差异,似乎没有效果。

2 个答案:

答案 0 :(得分:0)

  

是的,我想在两个不同时间之间以秒为单位获得差异。

您可以尝试以下方法:

#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

答案 1 :(得分:0)

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

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

因此,快速连续两次调用时间会产生相同的整秒数。

difftime期望time_t(从time()返回类型)作为其参数,并创建一个已用时间(以秒为单位)。

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