格式控制符f和lf的差异

醉花阴柳 2015-10-23 09:30:21
在"printf和其他不使用显示原型c函数的所有float参数任然会自动转换成double",此句摘抄与c primer plus第五版 中文版,在之前我一直理解格式控制符%f是表示float %lf表示double,然后在网上查了一些资料,表示printf中%f和%lf都表示输出double,但是我发现在scanf中double变量按%f输出会出现问题,在scanf中%f表示按float输入 %lf表示按double输入。我想问为何有这些区别呢?为何要这么麻烦呢? 资料链接:http://blog.sina.cn/dpool/blog/s/blog_5eb8ebcb0100nuj8.html?vt=4
...全文
711 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-10-25
  • 打赏
  • 举报
回复
因为 %f,%lf 本质上输出时候,都是输出的 double 制定标准的某些人,就认为, %f,%lf 只需要一个,另一个是多余的 但是,他们觉得,%lf 更加多余,于是就废了%lf , 似乎后来又给补上了,不过是作为可选处理 也就是说,float,double 浮点数输出,标准里面是 %f ,但是 double 也可以用 %lf了(某个版本又补了回来)
苏叔叔 2015-10-24
  • 打赏
  • 举报
回复
我一直“好读书,不求甚解”~
赵4老师 2015-10-23
  • 打赏
  • 举报
回复
printf Type Field Characters f double Signed value having the form [ – ]dddd.dddd, where dddd is one or more decimal digits. The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision. scanf Type Field Characters e, E, f, g, G Floating-point value consisting of optional sign (+ or –), series of one or more decimal digits containing decimal point, and optional exponent (“e” or “E”) followed by an optionally signed integer value. Pointer to float.
paschen 2015-10-23
  • 打赏
  • 举报
回复
是的,表示的确实不一致
fefe82 2015-10-23
  • 打赏
  • 举报
回复
printf 和 scanf 中的格式控制符的含义并不完全相同。 printf 请看: http://en.cppreference.com/w/c/io/fprintf scanf 请看:http://en.cppreference.com/w/c/io/fscanf
醉花阴柳 2015-10-23
  • 打赏
  • 举报
回复
感谢大家的回答,看了一些资料后发现书上也有说printf和scanf函数的这点差异,谢谢大家的解答
ipqtjmqj 2015-10-23
  • 打赏
  • 举报
回复
因为输出是转成字符串,占个空间由使用者控制, 而且没标注的浮点常量默认是double类型, 所以没必要分float和double. 而输入是由字符串转成float或double类型, float才4字节, 比较节约内存, 运算起来也比较快, 有这个需求, 所以分开.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧