c语言,声明变量为double或float,为什么导致结果不一致

图片说明

#include

int main(){
double f,c;
scanf("%1f",&f);
c = (f-32.0)*5.0/9.0;
printf("%.3f",c);
return 0;
}

上述代码若用double声明,结果乱码
若使用float声明,则结果运行正确

之前有了解到float输出时是先转换为double型,再按%f输出
这里不清楚为什么单精度和双精度对结果会产生影响
编译器使用的是codeblocks

scanf("%1f",&f);你的这行是%1(一)f么?直接复制你的代码也遇到同样问题,我把它写成%l(L)f就没问题了。

我用的gcc 4.4.7,只是结果不同,没有出现乱码的情况。

float:
98
-12.778

double:
98
-17.778

double应该用lf吧,不是1