于是在网上找到了答案。
答:printf嘚%f说明符的确既可以输出float型又可以输出double型 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型都适用這一规则)float型会被提升为double型。因此printf()只会看到双精度数参见问题15.2。
对于scanf情况就完全不同了,它接受指针这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样因此,scanf区别%f和%lf
下表列出了printf和scanf对于各种格式说明符可以接受的参数类型。
(严格地讲%lf在printf下是未定義的,但是很多系统可能会接受它要确保可移植性,就要坚持使用%f)