{% blockquote Taku https://segmentfault.com/q/1010000005590782 SegmentFault上的回答 %}
scanf函数是通过指针指向变量的。%f告诉scanf函数在所传地址位置上存储一个float型值,
而%lf告诉scanf函数在所传地址位置上存储一个double型值。这里float和double的区别是非常重要的。
如果给出了错误的转换说明,那么scanf函数将可能存储错误的字节数量
(没有提到的是,float型的为模式可能不同于double型的位模式)。
{% endblockquote %}

因此,当输入时必须使用%lf来确保数据被正确存储

为了方便使用者,很多编译器默许了常见的错误,当使用printf("%lf",a)时,若a为double变量,编译器会自动把其修改为%f

而LLVM会警告并推荐修改为%f。

scanf()函数中不存在%lf,输入double%lf输出用%f