关于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); 都不会出错。
相关文章推荐
- Struts2核心包
- Redis linux下安装
- java输出txt文件为unicode的编码方式
- 【编译打包】nagios-4.0.4-2.el6.src.rpm
- 数据库中索引的优缺点
- 相机不小心误删照片怎么恢复
- 【编译打包】nagios-4.0.4-2.el6.src.rpm
- spring (2.5, 3.2) 在 jre 1.8下的fix
- iOS 同步和异步 Get和Post请求
- extjs xtype 一览表
- 防止无意的错误
- ios 内购MKStoreKit小记
- 如何用10只实验鼠检验出1000个药瓶中哪个有毒药?
- 虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
- IOS判断当前网络连接类型(可区分2G和3G)
- Linux时间统计函数
- 深入探究IBM AIX高级系统管理(LVM、HACMP双机互备) 附下载地址
- 清华大学校长留给毕业生的五句话
- 推荐9款使用CSS3实现的超酷动画效果
- 人的差别在于业余时间