| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5715 人关注过本帖
标题:double型的数据用 %d 输入也可以?
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 37楼 韦春敢
呵呵,我一向只做题不出题~~ 别说出题也挺难的。而且成题也挺多的,不出也有的是。
2010-02-18 20:57
dydsdyds
Rank: 6Rank: 6
来 自:Java
等 级:侠之大者
帖 子:217
专家分:457
注 册:2010-2-14
收藏
得分:0 
回复 40楼 pangding
就像我发的那篇

c语言刚开一学期,就换开VB...
2010-02-18 20:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
反正我觉得不行,我写了一个小程序:
程序代码:
#include <stdio.h>

int main()
{
    double a;
    scanf("%d", &a);
    printf("%lf\n", a);

    return 0;
}


首先是我得到了一个警告:
warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘double *’

假装没看见,继续执行,我输入:
1.2345

输出的是:
0.000000

2010-02-18 21:27
dydsdyds
Rank: 6Rank: 6
来 自:Java
等 级:侠之大者
帖 子:217
专家分:457
注 册:2010-2-14
收藏
得分:0 
回复 43楼 pangding
可能是编辑器的不同吧,我把你的代码复制后,运行,警告没有,但是输出错误。
输入
1.2345
输出1.2345
-92559592117432005000000000000000000000000000000000000000000000.000000
Press any key to continue
把原来的代码改为
#include <stdio.h>

int main()
{
    double a;
    scanf("%d", &a);
    printf("%d\n", a);

    return 0;
}
后,程序也可执行
输入
1.2345
输出
1

再把原来的代码改为
#include <stdio.h>

int main()
{
    double a;
    scanf("%lf", &a);
    printf("%d\n", a);

    return 0;
}
输入
1.2345
输出
309237645



[ 本帖最后由 dydsdyds 于 2010-2-18 21:47 编辑 ]

c语言刚开一学期,就换开VB...
2010-02-18 21:43
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,这个结果挺正常的。要是用我的编译器做估计也是这结果。
你要是熟悉数在机器内部的表示的话,就应该知道为什么会这样。要不熟悉也无所谓,你就理解成,都用 %d 叫错有错着。但仅限于输入输出,这个 a 用于其它方面的计算都会产生不正常的结果。只要你两个用的不搭配,就什么结果都有可能。而且跟硬件是相关的(因为数在机内的储存方式与硬件有关)。不过反正用的一般都是 intel 80x86 兼容机,效果应该都一样。
2010-02-19 16:12
冰河砺剑
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2009-5-31
收藏
得分:0 
楼主的代码 scanf 改成 scanf("%lf %lf %lf",&a,&b,&c);
printf中改成 ”%f“,其他不变,结果就对了


[ 本帖最后由 冰河砺剑 于 2010-2-24 12:30 编辑 ]

[url=http://blog.]我的博客[/url]
2010-02-24 12:28
dydsdyds
Rank: 6Rank: 6
来 自:Java
等 级:侠之大者
帖 子:217
专家分:457
注 册:2010-2-14
收藏
得分:0 
回复 46楼 冰河砺剑
为什么printf要用%f输出?
而不用%lf?


c语言刚开一学期,就换开VB...
2010-02-24 12:43
冰河砺剑
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2009-5-31
收藏
得分:0 
在printf中,一般不分 %lf 和 %f的

[url=http://blog.]我的博客[/url]
2010-02-24 16:41
dydsdyds
Rank: 6Rank: 6
来 自:Java
等 级:侠之大者
帖 子:217
专家分:457
注 册:2010-2-14
收藏
得分:0 
回复 48楼 冰河砺剑
哦,受教了。谢谢你


c语言刚开一学期,就换开VB...
2010-02-24 17:17
幸运之星
Rank: 4
来 自:吉林
等 级:业余侠客
帖 子:275
专家分:239
注 册:2009-6-5
收藏
得分:0 
我来灌一下水啊

楼主学过VB?

要不然怎么printf写成print了嘿嘿

我有时就是的
2010-02-24 20:17
快速回复:double型的数据用 %d 输入也可以?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018602 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved