免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3639 | 回复: 14
打印 上一主题 下一主题

请教sscanf的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-26 18:08 |只看该作者 |倒序浏览
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
int main(){
    double db;
    float    ft;
    struct timeval tv;
    char tt[30];
    gettimeofday(&tv,NULL);

    int len = sprintf(tt,"%ld.%ld",tv.tv_sec,tv.tv_usec);
    tt[len] = '\0';

    sscanf(tt,"%f",&db);
    sscanf(tt,"%f",&ft);
    printf("tt:\t%s\n db:\t%f\n ft:\t%f",tt,db,ft);

    return 0;
}

我的执行结果:
tt:     1222423527.378962
db:     0.000000
ft:     1222423552.000000

请问这是怎么回事?怎么附值不上了??

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2008-09-26 18:40 |只看该作者
sscanf(tt,"%ld.%ld",&db, &ft);
试试

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-09-26 18:42 |只看该作者
没看清楚题意。惭愧。
给%f加上有效位数和小数点后几位,试试譬如%10.5f

[ 本帖最后由 Godbach 于 2008-9-26 18:45 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-09-26 19:07 |只看该作者
原帖由 Godbach 于 2008-9-26 18:42 发表
没看清楚题意。惭愧。
给%f加上有效位数和小数点后几位,试试譬如%10.5f



小数点后保留5位

论坛徽章:
0
5 [报告]
发表于 2008-09-27 09:04 |只看该作者
换成%10.5还是不行,请问还有其他方法吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2008-09-27 09:12 |只看该作者
得了,偶也测试一下吧。说不如做

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2008-09-27 09:20 |只看该作者
可以直接atof,哈哈,这是个变通的方法。

论坛徽章:
0
8 [报告]
发表于 2008-09-27 09:25 |只看该作者
怎么我这里就是不行啊.
tt:     1222478666.380682
db:        0.00000
ft:        0.00000
atof:   0.000000

Linux test1.yellzone.com 2.4.21-40.ELsmp #1 SMP Thu Feb 2 22:22:39 EST 2006 i686 i686 i386 GNU/Linux

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2008-09-27 09:28 |只看该作者
原帖由 sunceenjoy 于 2008-9-27 09:25 发表
怎么我这里就是不行啊.
tt:     1222478666.380682
db:        0.00000
ft:        0.00000
atof:   0.000000

Linux test1.yellzone.com 2.4.21-40.ELsmp #1 SMP Thu Feb 2 22:22:39 EST 2006 i686 i686 ...


刚才试了一下,ft可以出来值。但是感觉
tt:     1222289739.926623
db:    0.000000
ft:    1222289792.000000
感觉可能是float默认总的长度有限,肯定低于你这里sec和usec的长度,所以只能显示部分。

论坛徽章:
0
10 [报告]
发表于 2008-09-27 09:28 |只看该作者
其实我是想实现一段程序执行的时间。
有人用
    clock_t start, finish;
    double   duration;
    start = clock();
/**待测程序段*/
   
    finish = clock();
duration = (double)(finish - start)/ CLOCKS_PER_SEC;
printf("\n%f",duration);

这样是可以的。

   但我想我那样来计算时间差应该也是可以的,但就是不能转成double!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP