为了账号安全,请及时绑定邮箱和手机立即绑定

输出语句中 %f %lf的区别,输出语句不是输入

各位好!
在我所学的课本中 有一个这样的输出%lf
#include<stdio.h>
int main()
{
   float a=1.1;
   double b=2.2;
   printf("%f,%f\n",a,b);
   printf("%lf,%lf\n",a,b);
   return 0;
}
运行结果为
1.1000000,2.2000000
1.1000000,2.2000000


在输入语句中对%f和%lf有严格的规定
但请问在输出语句中这俩个有什么区别

正在回答

2 回答

printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。

0 回复 有任何疑惑可以回复我~
#1

逆时针行走

严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。 对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。
2015-02-11 回复 有任何疑惑可以回复我~
#2

IT饱 提问者

非常感谢!C89中对于printf中的%lf未定义
2015-02-13 回复 有任何疑惑可以回复我~

在printf中对于float和double类型都应该用%f。

虽然把%lf用于double也不报错。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

输出语句中 %f %lf的区别,输出语句不是输入

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信