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

3个回答

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

leahlee1214
leahlee1214 感谢大神,终于分清楚%1f与%lf!
大约 4 年之前 回复

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

float:
98
-12.778

double:
98
-17.778

yang004
engineer-yang 回复leahlee1214: 如果声明是float型,scanf的时候要用%f,如果声明是double型,scanf的时候就用%lf,就没有问题了。
大约 4 年之前 回复
leahlee1214
leahlee1214 华氏度转为摄氏度输去为什么为负数?
大约 4 年之前 回复

double应该用lf吧,不是1

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐