大仙爱吃糖 发表于 2018-8-7 17:24:09

带你学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,结果就计算正确了呢?

BngThea 发表于 2018-8-7 17:26:37

double对应的是 %lf,而不是 %f

claws0n 发表于 2018-8-7 17:27:28

double 要用 scanf("%lf", &hs);

TOP_LK 发表于 2018-8-7 17:47:59

float --> %f
double --> %lf
long float

九八零三 发表于 2018-8-7 18:44:16

是的是的 是的

梦星 发表于 2018-8-8 08:51:19

double对应的是 %lf,而不是 %f吧{:10_243:}

会上树的猪 发表于 2018-8-8 11:18:14

你的声明是double类型,系统会分配8个字节的空间,但是你scanf读取的时候用的转换说明符是%f,float类型,只有四个字节,计算机存储的时候会做出舍弃,然后你的hs最终存入的值是0.

CCCFC 发表于 2018-8-8 11:23:41

路过学习

前面有座山 发表于 2018-8-8 18:25:50

double 用 scanf("%lf", &hs);
不然不行的

卖报纸的小男孩 发表于 2018-8-8 19:48:25

在输出的时候 float 和 double 都可以用 %f,但在输入(scanf)的时候 float 用 %f,double 用 %lf。

1372322655 发表于 2018-8-11 19:06:17

666666666666666666666

shaungzhi20 发表于 2018-8-11 20:38:14

看完评论我发现我也忽略了这个问题,还以为都是用%f就行了

weizhongyang 发表于 2018-8-14 11:32:29

C语言中是特别强调类型匹配的,
因为在声明的时候用的是double类型,
所以在scanf输入的时候需要按照规则用%lf匹配类型输入,这样才能完全接收输入的数据,
补充:但在输出的时候 float 和 double 都可以用 %f。
页: [1]
查看完整版本: 带你学c带你飞,s1e8课后作业动手第一题