main(){ double x,y; scanf("%f",&x); y=x; printf("%f\n",y);getch();}经本人用TC运行 发现无论输入的x为何值 y都为0 但是把double改为float就运行正常 求解? 望高手帮助 。。。请问为何要改为lf呢?
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,配套使用。====[原创回答团]