将时间值除以C中的整数

时间:2009-11-11 01:57:12

标签: c time

我正在尝试将timeval除以整数。这是我到目前为止所得到的:

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
     struct timeval my_time;
     struct timeval my_time_quotient;
     int i;

     gettimeofday(&my_time, NULL);
     i = 5;

     my_time_quotient = my_time / i;

     printf("%d secs, %d msecs\n", (int)my_time_quotient.tv_sec, (int)my_time_quotient.tv_usec);

     return 0;
}

当我编译时,我得到:

jen@ubuntu:~/$ gcc -g -otimespike timespike.c
timespike.c: In function ‘main’:
timespike.c:15: error: invalid operands to binary / (have ‘struct timeval’ and ‘int’)

找到商的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

即使struct代表某种数字,您也无法直接将struct除以数字类型。

您必须先将结构转换为表示微秒数的整数类型。由于元素的类型为int,因此您需要找到一个数字类型,其位数几乎是int的两倍。希望您的编译器支持long long int__int64,两者都是64位。

将结构的内容转换为数字类型后,除法与任何除法一样直接进行。

执行除法后,您需要将结果存储回时间值,可能会使用“除法后余数”或“模数”运算符x % y

答案 1 :(得分:1)

由于这可能是一个家庭作业问题,我不会给你任何代码,但我会给你解释为什么它不起作用,以及使用它的方法。

当你使用普通的旧数据类型(整数,双精度)时,你可以分开。但是,timeval不是普通的旧数据类型 - 它是结构中两个的组合。 timevals结构不知道如何用整数除(这就是invalid operands to binary / (have ‘struct timeval’ and ‘int’)时的含义。

所以你必须手动执行此操作 - 除以秒数(tv_sec),然后除以纳秒数(tv_usec),并将这些除法的结果插回到my_time_quotient时间段。处理几分之一秒是留给读者的练习 - 但希思提出的方法是一种方法。