您的位置:首页 > 其它

关于C中float和double的一些问题

2014-03-21 13:48 148 查看
/*
*1003:单位换算
*author:JohnLi
*2014-3-20
*/
#include<stdio.h>
#include<stdlib.h>

#define INCH 0.393700787
#define FOOT 0.032808399
int main()
{
/*
如果定义为double,就会出错,输出莫名其妙的值
定义为float则一切正常
*/
float a;
//如果按照%d输出,那么会输出一个巨大的负数
//printf("%d\n", INCH);
//float方式的输出是正常值,精度会减小
//printf("%f\n",INCH);

scanf("%f",&a);

//强制类型转换为double也不行

printf("%f %f", a*INCH, a*FOOT);

system("PAUSE");
return 0;
}
一些调试信息我都写在注释里了。为这个问题纠结了好久,后来突然就解决了。刚开始抓错了重点,与问题相关的几条代码分别是:
float a;
scanf("%f",&a);
printf("%f %f", a*INCH, a*FOOT);
问题的重点是,在visual C++中,scanf/printf 中的 %lf 是针对double的,而%f是针对float的,划分得很清楚。这在Linux下的C编程中是没有的。我的错误在于没有意识到这个差异,定义为double时,使用了%f进行scanf,导致了错误。因此,如果使用float a; scanf("%f",&a);  或者 double a;scanf("%lf",&a); 都不会出错。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: