我正在尝试将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’)
找到商的正确方法是什么?
答案 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
时间段。处理几分之一秒是留给读者的练习 - 但希思提出的方法是一种方法。