doubleprintf中正确的格式说明符是什么?是%f吗%lf?我相信是%f,但我不确定。
double
%f
%lf
#include <stdio.h> int main() { double d = 1.4; printf("%lf", d); // Is this wrong? }
"%f"是(或至少一种)双精度的正确格式。a 没有格式, 因为float如果您尝试将 a 传递float给printf,它将在收到它double之前被提升为1。在当前标准下也是可以接受的——如果后面跟着转换说明符(等等) ,则被指定为无效。printf``"%lf"``l``f
"%f"
float
printf
printf``"%lf"``l``f
请注意,这是格式字符串与(和等)格式printf字符串有很大不同的地方。对于输出,您正在传递一个 value ,当作为可变参数传递时,它将被提升为to 。对于输入,您传递的是未提升的 指针 ,因此您必须确定是要读取 a还是 a ,因此 for表示您要读取 a并且意味着您要读取 a (并且,它是什么值得,对于 a ,您使用for或)。scanf``fscanf float``double scanf``float``double``scanf``%f``float``%lf``double``long double``%Lf``printf``scanf
scanf``fscanf
float``double
scanf``float``double``scanf``%f``float``%lf``double``long double``%Lf``printf``scanf
1.C99,搂6.5.2.2/6:“如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并且将浮点类型的参数提升为双精度。这些被称为默认参数提升。” 在 C++ 中,措辞有些不同(例如,它不使用“原型”一词),但效果是一样的:所有可变参数在被函数接收之前都经过默认提升。