c语言关于浮点型的问题

虽然昨天已经看玩了数据类型,但是并没有做习题,本以为会很轻松,谁知遇到了一个神奇的问题:

书上说%f对应的是float 和double 两种类型,lf%对应的是long double 这个很容易理解,在c prime plus中描述:

  • 它们向那些没在原型中休闲时说明参数类型的函数(如pintf())传递参数时,c自动将float类型的参数转换为double类型。
    但是,今天习题测试程序中 scanf表现好像不是这样;
double a,b;
a=3.156e7;
scanf("%f",&b);
printf("%f",a*b);

上述代码的结果是混乱的;
我最初不知道是这里出了问题,还以为是浮点型计算的问题,由于浮点型在内存中储存方式的特点,我以为乘法计算必然出现错误。
于是我将b改为了int(b代表的参数是年份);

double a;
int b;
a=3.156e7;
scanf("%d",&b);
printf("%f",a*b);

果然解决了问题,不过我很纳闷,难道浮点数不能做乘法计算?那c语言也太low了,这点应该不算难。
于是我在网上查了浮点乘法,我发现我错了,对不起小c!

实际是scanf如果对应变量是一个double类型的话
必须使用%lf,这是我没想到的,因为c prime plus的解释让我以为printf 和 scanf是一样的,事实上这两个函数也经常被一起提起。
明白了

double a,b;
a=3.156e7;
scanf("%lf",&b);
printf("%f",a*b);

没问题了

又或者

float a,b;
a=3.156e7;
scanf("%f",&b);
printf("%f",a*b);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值