在下面的代碼中發生了一件奇怪的事情。函數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