You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言华氏度与摄氏度互转计算器故障求助

帮你排查C语言温度转换计算器的问题

嘿,我来帮你看看这个温度转换程序的问题哈,几个关键细节没处理对,导致程序没法正常工作,咱们一个个说:

  • 字符串比较不能用==:C语言里字符串本质是字符数组,==只会比较两个数组的内存地址,不会对比内容。得用strcmp()函数来做字符串内容比较,记得要包含<string.h>头文件。
  • 转换公式计算时机错误:你现在是先计算fahrenheitcelsius,但这时候temp还没被用户输入,值是随机的垃圾值,肯定得不到正确结果。得先让用户输入温度,再计算转换值。
  • fgets的数组大小不够:你声明的answer[2]只能存1个字符加终止符,而"CF"或"FC"是2个字符,得把数组设成至少3个元素(比如char answer[3];),这样fgets才能完整读取输入的两个字符。另外,fgets会把输入末尾的换行符也读进去,最好加一步去掉换行符的处理,避免影响后续比较。
  • 拼写小错误:提示文字里的celcius应该是celsius,虽然不影响运行,但规范一点更好~

接下来是修正后的完整代码:

#include <stdio.h>
#include <string.h> // 引入strcmp需要的头文件

int main() {
    double temp;
    char answer[3]; // 足够存"CF"/"FC"加上终止符

    printf("Type 'CF' if you want to convert from celsius to fahrenheit, and 'FC' if you want to convert from fahrenheit to celsius: ");
    fgets(answer, sizeof(answer), stdin);

    // 去掉fgets读取到的换行符(如果有的话)
    size_t len = strlen(answer);
    if (len > 0 && answer[len-1] == '\n') {
        answer[len-1] = '\0';
    }

    if(strcmp(answer, "CF") == 0){
        printf("Type the temperature here: ");
        scanf("%lf", &temp);
        // 输入后再计算转换值
        double fahrenheit = (temp * 1.8) + 32;
        printf("Answer: %.2f\n", fahrenheit); // 用%.2f控制小数位数更美观
    } else if(strcmp(answer, "FC") == 0){
        printf("Type the temperature here: ");
        scanf("%lf", &temp);
        double celsius = (temp - 32) * 5.0/9.0; // 用5/9比0.5556更精确
        printf("Answer: %.2f\n", celsius);
    } else {
        // 增加错误提示,处理用户输入不符合要求的情况
        printf("Invalid input! Please enter 'CF' or 'FC'.\n");
    }
    return 0;
}

额外提两个小优化:

  • 5.0/9.0代替0.5556,这样转换结果更精确,因为0.5556是近似值。
  • 增加了错误输入的处理,当用户输入不是"CF"或"FC"时给出提示,程序更健壮。

内容的提问来源于stack exchange,提问作者Ralph Daniel Honra

火山引擎 最新活动