鱼C论坛

 找回密码
 立即注册
查看: 1933|回复: 2

[已解决]S1E8 动动手第一题 用double类型表示温度最后计算出的华氏度是特别小的一个负数

[复制链接]
发表于 2023-1-9 02:13:06 | 显示全部楼层 |阅读模式
20鱼币
最开始先自己想了想 然后写出了下边的代码
#include<stdio.h>
int main(){
        double hua,she;
        printf("请输入华氏度:");
        scanf_s("%f",  &hua);
        she = (hua - 32) * 5 / 9;
        printf("转换为摄氏度是:%f", she);
        return 0;
}
然后我发现不管我输入的华氏度为什么数 最后所打印的摄氏度永远是-51422002673002139043751390275562916957306107193274651201503232这个东西
我就对照着答案发现唯一不正确的地方好像就是那两个温度变量的数据类型 我用的是double而答案里的是float 于是我就改了一下 然后就真的可以了 想问一下这是为什么 有没有大佬说一下
最佳答案
2023-1-9 02:13:07
你的代码第7行,使用了 "%f" 格式化字符串输出来读取输入到 hua 变量中的浮点数(double 类型),但是在 scanf_s 函数前,没有把 hua 变量的地址作为 scanf_s 的第二个参数传递。scanf_s 函数通过其第二个参数来查找变量的地址,然后将读入的值存储在该地址中。

所以,为了解决这个问题,你需要把 scanf_s 函数中的 "%f" 替换成 "%lf"(代表 long float,也就是 double 类型)。并且确保正确地传递 hua 变量的地址,你可以将第3行改为:“double hua, she;” 并将第7行改为:“scanf_s("%lf", &hua);”。

此外,如果你的目标是按照题目要求将华氏温度转换为摄氏温度(而不是反过来),那么你需要注意你的计算式是否正确。更准确的计算式为:she = (hua - 32) * 5 / 9;

最终代码示例:


  1. #include <stdio.h>

  2. int main() {
  3.     double hua, she;
  4.     printf("请输入华氏度:");
  5.     scanf_s("%lf", &hua);
  6.     she = (hua - 32) * 5 / 9;
  7.     printf("转换为摄氏度是:%lf\n", she);
  8.     return 0;
  9. }
复制代码

最佳答案

查看完整内容

你的代码第7行,使用了 "%f" 格式化字符串输出来读取输入到 hua 变量中的浮点数(double 类型),但是在 scanf_s 函数前,没有把 hua 变量的地址作为 scanf_s 的第二个参数传递。scanf_s 函数通过其第二个参数来查找变量的地址,然后将读入的值存储在该地址中。 所以,为了解决这个问题,你需要把 scanf_s 函数中的 "%f" 替换成 "%lf"(代表 long float,也就是 double 类型)。并且确保正确地传递 hua 变量的地址,你可以将第3 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-9 02:13:07 | 显示全部楼层    本楼为最佳答案   
你的代码第7行,使用了 "%f" 格式化字符串输出来读取输入到 hua 变量中的浮点数(double 类型),但是在 scanf_s 函数前,没有把 hua 变量的地址作为 scanf_s 的第二个参数传递。scanf_s 函数通过其第二个参数来查找变量的地址,然后将读入的值存储在该地址中。

所以,为了解决这个问题,你需要把 scanf_s 函数中的 "%f" 替换成 "%lf"(代表 long float,也就是 double 类型)。并且确保正确地传递 hua 变量的地址,你可以将第3行改为:“double hua, she;” 并将第7行改为:“scanf_s("%lf", &hua);”。

此外,如果你的目标是按照题目要求将华氏温度转换为摄氏温度(而不是反过来),那么你需要注意你的计算式是否正确。更准确的计算式为:she = (hua - 32) * 5 / 9;

最终代码示例:


  1. #include <stdio.h>

  2. int main() {
  3.     double hua, she;
  4.     printf("请输入华氏度:");
  5.     scanf_s("%lf", &hua);
  6.     she = (hua - 32) * 5 / 9;
  7.     printf("转换为摄氏度是:%lf\n", she);
  8.     return 0;
  9. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-9 07:32:13 | 显示全部楼层
scanf 和 printf 在处理double变量时 需要使用 %lf而并非%f,否则会出现错误。
如果有用请设置最佳,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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