c - 为什么 scanf() 需要 "%lf"来表示 double ,而 printf() 只需 "%f"就可以了?

标签 c scanf length-modifiers

为什么scanf()在读取double时需要“%lf”中的l ,当 printf() 可以使用“%f”时,无论其参数是 double 还是 float

示例代码:

double d;
scanf("%lf", &d);
printf("%f", d);

最佳答案

因为对于采用可变参数的函数,C 会将浮点型提升为 double 型。指针不会提升为任何内容,因此您应该使用 %lf%lg%le (或 %la 在 C99 中)以 double 形式读取。

关于c - 为什么 scanf() 需要 "%lf"来表示 double ,而 printf() 只需 "%f"就可以了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37971950/

相关文章:

c - 如何在结构体数组中存储数字

c++ - 如何使用 sscanf 扫描由 `/` 分隔的两个字符串?

string - 在 MATLAB 中高效使用 sscanf

c - 关于C中scanf的转换说明符

C: stdout 挂起 linux 管道

c++ - Cuda 从设备内存创建 3d 纹理和 cudaArray(3d)

c - Linux C IPv6 原始套接字 - 告诉套接字不要分配流标签

c - 为什么 scanf() 需要 "%lf"作为 double ,而 printf() 只需要 "%f"就可以?

c - 结构问题中的指针。我做对了吗?