我在一本C语言书籍的例子中看到了这两个参数,但作者没有详细解释它们之间的区别。我知道
%f
表示应该放置一个float
类型的值。我尝试过查找相关解释,但很难找到。那么%lf
又是什么意思呢?%f
表示应该放置一个float
类型的值。我尝试过查找相关解释,但很难找到。那么%lf
又是什么意思呢?printf
,并表示在scanf
中使用float
或double
。printf
,float
类型的参数被提升为double
,因此%f
和%lf
都用于double
。对于scanf
,您应该使用%f
表示float
,%lf
表示double
。printf
系列中,%f
和%lf
没有区别。 ISO C标准(所有引用均来自C11),第7.21.6.1节“ fprintf函数”,段落/7指出,对于 l修饰符(我强调):对于scanf
函数,%f
用于读取float
类型的值,而%lf
用于读取double
类型的值。
对于printf
函数:在C99及更高版本中,它们是相同的,并且可以打印float
或者double
类型的值。在C89中,%lf
会导致未定义的行为,尽管将其视为%f
的常见扩展。
之所以在printf
函数中使用一种格式指示符来表示两种不同的数据类型,是因为默认参数提升(default argument promotions);当使用参数调用函数时,如果该参数的类型是float
,则会将其提升为double
类型。因此,无论哪种情况,在printf
函数中都只会看到一个double
类型的值。
printf
或fprintf
,而不是查找%f
和%lf
吗?printf
和fprintf
是用于格式化输出的函数。 - ruakhprintf
(和类似函数)参考资料可能会对你有所帮助。当然,还有一个scanf
(和类似函数)的参考资料。 - Some programmer dude