搜索
查看: 1506|回复: 4
打印 上一主题 下一主题

又有问题了

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-5 23:28:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
请问 占位符%lf和%f 有什么区别吗 我试了下没有按照教程的输入%lf而是%f  结果没变啊 求解  还有我以后应该还会有很多问题了  不知道可不可以把这个帖子做长期帖 找里面的高手请教

最佳答案

查看完整内容

问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢? 答:printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。 (严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使 ...
沙发
发表于 2013-4-5 23:28:56 | 只看该作者
问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?
答:printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。 (严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。)
对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

很经典的问答  请选为最佳 谢谢
板凳
 楼主| 发表于 2013-4-5 23:57:06 | 只看该作者
还有在第2章第9节中 为什么不要定义变量
地板
发表于 2013-4-6 11:47:30 | 只看该作者
%lf对应float型,%lf对应double型
数字精度小的情况下没区别的,编译器可能会给出警告

因为没必要定义变量

int a=3, b=4;
int c;
c = a+b;
printf("%d\n",c);

肯定不如
printf("%d\n",3+4);
写起来简单,而且也提高了可读性
5#
 楼主| 发表于 2013-4-10 19:17:59 | 只看该作者
Somnus 发表于 2013-4-5 23:28
问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?
答:printf ...

将变量a 赋初始值 是什么意思
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表