本帖最后由 O狂且O 于 2014-3-20 10:14 编辑
printf 输出浮点类型 float 时会自动将其 "类型提升" 到 double, 所以使用 %f 就可以输出 float 和 double 两种类型.
而 %lf 就比较麻烦了, 在 MSVC 下有时候不能用. 而在 Linux 下 GCC 编译, printf("%f 和 %lf 一样");
scanf 就完全不同了,它接受的是指针,所以没有类似的类型提升。用指针向 float 存储和向 double 存储大不一样(4 和 8 字节),因此,scanf 区别 %f 和 %lf.
建议使用浮点数的时候能使用双精度不使用单精度. 所以..........你懂的.
下面这段程序, 在 VS2010 和 Linux GCC 下都可以正常输出. 但是在 windows 下的 MinGW 下却只能用 %f, %lf 输出 -0.000000.
所以还是老老实实的用 %f 吧.
#include <stdio.h>
double ar[4];
int main(int argc, char *argv[])
{
int i = 0;
printf("Please input 4 numbers:\n");
scanf("%lf %lf %lf %lf", &ar[0], &ar[1], &ar[2], &ar[3]);
for(i = 0; i < 4; i++) {
printf("%f\n", ar[i]);
printf("%lf\n", ar[i]);
}
return 0;
}
|