读书人

变量类型有关问题!

发布时间: 2012-03-28 15:40:03 作者: rapoo

变量类型问题!!!
我定义1变量为double型,输出时用printf( "%f ",x);代码如下:
#include <stdio.h>
void main()
{
double x;
scanf( "%f ",&x);
printf( "%f ",x);
}
输入1.23456
输出为:
-92559604293439514000000000000000000000000000000000000000000000.000000


如果代码改为:
#include <stdio.h>
void main()
{
double x;
x=1.23456
printf( "%f ",x);
}

则输出正确!!

why???大侠解释一下!


[解决办法]
#include <conio.h>
#include <stdio.h>

void main()
{
double x;
scanf( "%lf ",&x);
printf( "%lf ",x);
getch();
}

double 对应lf
float 对应f
[解决办法]
当然%f也可以用于输出double只是读取方式按照float读取,所以例子2是可以的~
[解决办法]
我的理解是:
scanf( "%f ",&x);是将从键盘读入的一个数存入到x所在的存储单元,因为float和double所占字节数不同,所以有一半的字节是不确定值.
printf( "%f ",x);是将x(double型)以浮点格式输出到屏幕上,也就是将整个double空间的数以浮点格式读出来.因为有一半的字节为不确定值,所以最后输出的值也是不确定的.
而:
double x;
x=1.23456 ;
printf( "%f ",x);
因为浮点数常量在C中默认为是double型的,所以x=1.23456; 会将1.23456转换成二进制,存入整个double空间,printf( "%f ",x)再将double空间的值以浮点格式输出,因为整个double空间存的是1.23456,所以也能输出1.23456


[解决办法]
输出可以用%f来输出双精度型
但是输入必须用%lf\%le来输入双精度的!

读书人网 >C语言

热点推荐