鱼C论坛

 找回密码
 立即注册
查看: 1766|回复: 12

[已解决]带你学c带你飞,s1e8课后作业动手第一题

[复制链接]
发表于 2018-8-7 17:24:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:写一个华氏度到摄氏度的转换程序,用户输入华氏度,程序计算并输出对应的摄氏度。

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,结果就计算正确了呢?
最佳答案
2018-8-14 11:32:29
C语言中是特别强调类型匹配的,
因为在声明的时候用的是double类型,
所以在scanf输入的时候需要按照规则用%lf匹配类型输入,这样才能完全接收输入的数据,
补充:但在输出的时候 float 和 double 都可以用 %f。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-7 17:26:37 | 显示全部楼层

回帖奖励 +3 鱼币

double对应的是 %lf,而不是 %f
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-7 17:27:28 From FishC Mobile | 显示全部楼层

回帖奖励 +3 鱼币

double 要用 scanf("%lf", &hs);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 17:47:59 | 显示全部楼层

回帖奖励 +3 鱼币

float --> %f
double --> %lf
long float
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 18:44:16 | 显示全部楼层

回帖奖励 +3 鱼币

是的是的 是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 08:51:19 | 显示全部楼层

回帖奖励 +3 鱼币

double对应的是 %lf,而不是 %f吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 11:18:14 | 显示全部楼层

回帖奖励 +3 鱼币

你的声明是double类型,系统会分配8个字节的空间,但是你scanf读取的时候用的转换说明符是%f,float类型,只有四个字节,计算机存储的时候会做出舍弃,然后你的hs最终存入的值是0.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 11:23:41 | 显示全部楼层

回帖奖励 +3 鱼币

路过学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 18:25:50 | 显示全部楼层

回帖奖励 +3 鱼币

double 用 scanf("%lf", &hs);
不然不行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 19:48:25 | 显示全部楼层

回帖奖励 +3 鱼币

在输出的时候 float 和 double 都可以用 %f,但在输入(scanf)的时候 float 用 %f,double 用 %lf。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-11 19:06:17 | 显示全部楼层

回帖奖励 +3 鱼币

666666666666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-11 20:38:14 From FishC Mobile | 显示全部楼层
看完评论我发现我也忽略了这个问题,还以为都是用%f就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-14 11:32:29 | 显示全部楼层    本楼为最佳答案   
C语言中是特别强调类型匹配的,
因为在声明的时候用的是double类型,
所以在scanf输入的时候需要按照规则用%lf匹配类型输入,这样才能完全接收输入的数据,
补充:但在输出的时候 float 和 double 都可以用 %f。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 04:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表