C语言的double问题 有题目 急求帮助

main()
{ double x,y;
scanf("%f",&x);
y=x;
printf("%f\n",y);
getch();
}
经本人用TC运行 发现无论输入的x为何值 y都为0 但是把double改为float
就运行正常 求解? 望高手帮助 。。。
请问为何要改为lf呢?
最新回答
小阳光温暖我╮

2024-11-29 08:45:35

C语言的浮点数一般用IEEE-754标准浮点数实现,其中的存储规格比较复杂,有兴趣可以自行搜索。可以明确的是float和double的精度是不同的(保存的指数、尾数的长度不同),用float的存储规格去解析一个double数自然无法保证得到正确的结果(有些数比如0的话float和double的表示都是一样的,可以得到相同结果)。因此对于double应该用%lf而不是%f。
另外,有些实现的printf函数族对于这方面比较模糊,像Microsoft Visual C & C++配套的运行库中,printf函数族就不区分%f和%lf。
当然,为了写出来的程序的稳健性和可移植性,对于float用%f,对于double用%lf,配套使用。
====
[原创回答团]
解桑陌

2024-11-29 13:02:37

因为你那个double是double float,而float是8位,double是15位,精度不一样,所以要用lf(long float)来输出double型。
泪海

2024-11-29 10:22:40

main()
{ double x,y;
scanf("%lf",&x);//这里要改为lf
y=x;
printf("%f\n",y);//这里lf和f都可以
getch();
}
梦忆沐歌

2024-11-29 12:15:56

main()
{
double x,y;
scanf("%lf",&x);
y=x;
printf("%lf\n",y);
getch();
}
欧巴会发光

2024-11-29 12:41:06

他们说得对!