孑鸢123 发表于 2023-1-9 02:13:06

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

最开始先自己想了想 然后写出了下边的代码
#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 于是我就改了一下 然后就真的可以了 想问一下这是为什么 有没有大佬说一下

sfqxx 发表于 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;

最终代码示例:


#include <stdio.h>

int main() {
    double hua, she;
    printf("请输入华氏度:");
    scanf_s("%lf", &hua);
    she = (hua - 32) * 5 / 9;
    printf("转换为摄氏度是:%lf\n", she);
    return 0;
}

ExiaGN001 发表于 2023-1-9 07:32:13

scanf 和 printf 在处理double变量时 需要使用 %lf而并非%f,否则会出现错误。
如果有用请设置最佳,谢谢!
页: [1]
查看完整版本: S1E8 动动手第一题 用double类型表示温度最后计算出的华氏度是特别小的一个负数