带你学c带你飞,s1e8课后作业动手第一题
问题:写一个华氏度到摄氏度的转换程序,用户输入华氏度,程序计算并输出对应的摄氏度。1摄氏度 =(1华氏度 – 32)* 5 / 9
1 #include <stdio.h>
2
3 int main(){
4
5 double hs;
6 double ss;
7
8 printf("请输入华氏度:");
9 scanf("%f",&hs);
10
11 ss = (hs - 32) * 5 / 9;
12 printf("转换为摄氏度为:%.2f\n",ss);
13
14 return 0;
15
16 }
为甚么这里用double,最后结果会出错
请输入华氏度:45
转换为摄氏度为:-17.78
将double换成float,结果就计算正确了呢? double对应的是 %lf,而不是 %f double 要用 scanf("%lf", &hs); float --> %f
double --> %lf
long float 是的是的 是的 double对应的是 %lf,而不是 %f吧{:10_243:} 你的声明是double类型,系统会分配8个字节的空间,但是你scanf读取的时候用的转换说明符是%f,float类型,只有四个字节,计算机存储的时候会做出舍弃,然后你的hs最终存入的值是0. 路过学习 double 用 scanf("%lf", &hs);
不然不行的 在输出的时候 float 和 double 都可以用 %f,但在输入(scanf)的时候 float 用 %f,double 用 %lf。 666666666666666666666 看完评论我发现我也忽略了这个问题,还以为都是用%f就行了 C语言中是特别强调类型匹配的,
因为在声明的时候用的是double类型,
所以在scanf输入的时候需要按照规则用%lf匹配类型输入,这样才能完全接收输入的数据,
补充:但在输出的时候 float 和 double 都可以用 %f。
页:
[1]