printf中的double的正确格式说明符是什么?是%f还是%lf?我相信是%f,但我不确定
代码示例
#包括<;标准h>;
int main()
{
双d=1.4;
printf(“%lf”,d);//这是错误的吗?
}
“%f”是双精度打印的正确格式(或至少一种格式)。没有float格式,因为如果尝试将float传递给printf,则在printf接收到它之前,它将被提升为在当前标准下也是可以接受的——如果后面跟有double%lf“f转换说明符,则指定l无效
请注意,这是一个printf格式字符串与scanf(和fscanf等)格式字符串有很大不同的地方。对于输出,您正在传递一个值,当作为可变参数传递时,该值将从浮点提升到双精度。对于输入,您正在传递一个未升级的指针,因此您必须告诉scanf您是要读取一个float还是一个double,因此对于scanf,%f表示您要读取一个float,%lf表示您要读取一个double(而且,对于长双精度,您可以将%Lf用于printf或scanf)
1、C99、Pur.5.5.2.2/6:“如果表示被叫函数的表达式具有不包含原型的类型,则在每个参数上执行整数提升,并且将类型浮点数的参数提升为两倍。这些被称为默认参数促销。”在C++中,措辞有所不同。(例如,它不使用“原型”一词),但效果是一样的:所有可变参数在函数接收之前都会经历默认提升。