最近做C语言的题目,经常会遇到输出函数中double类型的数据既有对应%f的又有对应%lf的,于是就总结一下。
用于printf()
函数的情况
在printf()
函数中,%f
和%lf
都可以用来打印double
类型的数字。这是因为printf()
中的float
类型会自动提升为double
类型。
double d = 3.14159;
printf("%f\n", d); // 正确
printf("%lf\n", d); // 也正确,但一般不常用
在实际编程中,通常只使用 %f 来打印 double 类型的数值。
用于scanf()
函数的情况
在 scanf ()
函数中,%f
和 %lf
有明确的区别。%f
用于读取 float
类型的数据,而 %lf
用于读取 double
类型的数据。
float f;
double d;
// 读取 float 类型的数值
scanf("%f", &f);
// 读取 double 类型的数值
scanf("%lf", &d);
如果你在 scanf 中使用了错误的格式说明符,例如使用 %f 来读取 double,或者使用 %lf 来读取 float,则会导致未定义行为,可能会出现意想不到的错误。
小结
- 在 printf 中,%f 和 %lf 都可以用来打印 double 类型的数值,通常只使用 %f。
- 在 scanf 中,%f 用于读取 float 类型的数据,而 %lf 用于读取 double 类型的数据。
#include <stdio.h>
int main() {
float f;
double d;
// 使用 scanf 读取 float 和 double
printf("请输入一个 float 类型的数值:");
scanf("%f", &f);
printf("请输入一个 double 类型的数值:");
scanf("%lf", &d);
// 使用 printf 打印 float 和 double
printf("读取到的 float 值为:%f\n", f);
printf("读取到的 double 值为:%f\n", d); // 使用 %f 打印 double
printf("读取到的 double 值为:%lf\n", d); // 也可以使用 %lf 打印 double
return 0;
}