printf("%f") 或 printf("%lf") 用于 c 中的双打?

printf("%f") or printf("%lf") for doubles in c?

我的教授说,当你执行 scanf 时,双精度数用 %lf 表示,但在 printf 中它是 %f(用于浮点数。) 这很奇怪,因为他说在他的编码 class 中我们从不使用浮点数,只使用双精度数。他没有解释原因。

我写了一个简单的程序来打印双精度值。我将 printf 与 %lf 和 %f 一起使用。结果还是一样。

有什么区别?

对于所有 "vararg" 函数(声明包含 ... 的函数,例如 printfscanf)较小的类型将自动提升或转换为较大的类型.例如short会提升为intfloat会提升为double.

这意味着 printf 格式 %f%lf 是相同的,因为参数将是 double.

但对于 scanf,您不传递将被提升或转换的值,而是传递 指针 ,不会对其进行转换。指向 float(即 float *)的指针与指向 double(即 double *)的指针非常不同。所以对于 scanf %f%lf 是有区别的。