在下面的代码中发生了一件奇怪的事情。函数get_time_in_seconds()是一个我自己构建和测试的自定义函数,在直接从long printf语句中调用时可以正常工作。但是,当我将其分配给变量curr_time2时,它不存储期望值。任何猜测为什么?这段代码有什么问题?
while (1)
{
count++;
bytes_read = recvfrom(sock,recv_data,1024,0,(struct sockaddr *)&client_addr, (socklen_t*)&addr_len);
recv_data[bytes_read] = '\0';
strcpy(buff,inet_ntoa(client_addr.sin_addr));
printf("\nAt %lf (%s , %d, Num : %d) said : ",get_time_in_seconds(),buff,ntohs(client_addr.sin_port),get_id(buff));
printf("%s", recv_data);
curr_time2=get_time_in_seconds();
printf("%lf\n",curr_time2);
// data.nodeid=get_id(buff);
// data.time = curr_time2;
//printf("%f,%f\n",data.time,curr_time2);
store_packetdata(&data);
fflush(stdout);
}
示例输出:
在1303829191.827888(10.22.6.162, 35355,货号:1)所述:505 1303829248.000000
在1303829196.827893(10.22.6.162, 35355,货号:1)说:506 1303829248.000000
at 1303829201.827898(10.22.6.162, 35355,货号:1)所述:507 1303829248.000000
在1303829206.827903(10.22.6.162, 35355,货号:1)所述:508 1303829248.000000
在1303829211.827908(10.22.6.162, 35355,货号:1)所述:509 1303829248.000000
在1303829216.827913(10.22.6.162, 35355,货号:1)所述:510 1303829248.000000
在1303829221.827918(10.22.6.162, 35355,货号:1)所述:511 1303829248.000000
在1303829226.827923(10.22.6.162, 35355,货号:1)所述:512 1303829248.000000
在1303829231.827928( 10.22.6.162, 35355,货号:1)所述:513 1303829248.000000
在1303829236.827933(10.22.6.162,35355,货号:1)所述:514 1303829248.000000
在1303829241.827938(10.22.6.162,35355,民:1)说:515 1303829248.000000
编辑:我现在已经解决了这个问题。最初,curr_time2和get_time_in_sconds()的返回类型都是浮动的。当我将这两个代码转换为两倍时,代码开始工作。但是,我想知道的是为什么printf()打印准确,而curr_time2只存储该值的近似值。
新的声明(更改旧的float浮动)。
double get_time_in_seconds()
{
gettimeofday(&tv, NULL);
double retval= (double)tv.tv_sec + ((double)tv.tv_sec)/1000000;
return retval;
}
static double curr_time2=0.0;
@ apoorv020:你能发布你的get_time_in_second函数和curr_time2的声明吗? – Heisenbug 2011-04-26 14:34:34
'curr_time2'是什么类型? – pmg 2011-04-26 14:35:36
什么类型是curr_time2? get_time_in_seconds()返回什么数据类型? – Axel 2011-04-26 14:36:24