C语言如何输入双精度数据?

main(){doublea,b;scanf("%f,%f",&a,&b);a+=b;printf("a+b=%f",a);}程序本身很简单,请问在上面的程序运行时输入两... main()
{
double a,b;
scanf("%f,%f",&a,&b);
a+=b;
printf("a+b=%f",a);
}
程序本身很简单,请问在上面的程序运行时输入两个数据:10,10,为什么得不到20.000000?
在输入时,将格式修改为%lf即可,为什么%f不可以呢?
大家没有理解问题的实质。结果是20.000000,其中的小数位数是由%f决定的,本人没有异议,在输出时无需改成%lf,更无需 用格式控制其输出的小数位数。
关键问题是,scanf("%f,%f",&a,&b);不能输入双精度数据吗?如果超过范围发生溢出正常,但输入10,10为什么就得不到20这个结果呢?
大家可以把上述程序运行下,看得到的结果是怎么算出来的?
展开
 我来答
kaixingui2012
2015-09-09 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6190万
展开全部

C语言用scanf()函数输入双精度数据时,采用的数据格式参数必须是%lf,如:

double d;
scanf("%lf", &d );

scanf("%f,%f",&a,&b);不能输入双精度数据吗?

当然不能。主要原因在于double和float类型的大小不同:

  1. double类型数据在内存中存储占8字节(64位),按IEEE754标准存储,格式为:1位符号位+11位指数位+52位小数位

  2. float类型数据在内存中存储占4字节(32位),按IEEE754标准存储,格式为:1位符号位+8位指数位+23位小数位

  3. 当输入数据格式串为%f时,scanf()按float类型将输入的数据存储到内存地址中,这时,若再按double类型解释输出数据时,数据当然不是用户输入的内容了。

百度网友89799553d
2010-10-26 · TA获得超过322个赞
知道小有建树答主
回答量:483
采纳率:0%
帮助的人:309万
展开全部
首先 读入double要%lf
然后输出的时候需要设置保留位数 否则如果没有小数的话就是输出整数
printf("a+b=%.6lf",a);
就是保留6位

%f对应的是单精度的float
double必须用%lf 输出的时候是会把double转换成float输出的 但是输入不能
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
畅景彰b5
2010-10-26 · TA获得超过4373个赞
知道小有建树答主
回答量:839
采纳率:0%
帮助的人:1259万
展开全部
因为%f是float的占位符,double的占位符是%lf,所以程序要改成一下的形式就可以了
main()
{
double a,b;
scanf("%lf,%lf",&a,&b);
a+=b;
printf("a+b=%lf",a);
}
这段程序我已经通过调试了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心云细雨
2010-10-26 · TA获得超过687个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:333万
展开全部
输出可以使用%f,但是输入一定要用%lf。
%lf%lf,有的编译器中间不用逗号。
楼主没必要去钻牛角尖,知道什么用就行了,为什么还一定要知道它的工作原理呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
犹悦沅Ql
2010-10-26 · TA获得超过525个赞
知道小有建树答主
回答量:476
采纳率:0%
帮助的人:168万
展开全部
这样也可以输出20
main()
{
float a,b;
scanf("%f,%f",&a,&b);
a+=b;
printf("a+b=%f",a);
}

float和double的存储格式差的太远
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式