int 产生接近正确的答案,但 float 只给出 -18.000

int produces near correct answer, but float just gives -18.000

我编写了一个简单的程序,使用函数将华氏度转换为摄氏度(已经在 Python 工作了 2 周,想重新振作起来):

#include <stdio.h>
#include <math.h>

int temp_change(fahrenheit);

int main()
{
    while(1)
    {
        int fahrenheit;
        printf("Please input a temperature in Fahrenheit.\n");
        scanf("%d", &fahrenheit); //Obtains degrees F value
        printf("%d\n", temp_change(fahrenheit));

    }
}
//Function to change temperature
int temp_change(fahrenheit)
{
    int centigrade;
    centigrade = 5*(fahrenheit - 32)/9; //Changing the temperature
    return centigrade;
}

它给了我正确的答案(最接近的程度)。但是,我想要确切的答案,所以我将所有 int 更改为 float([=13= 除外)。现在程序唯一会给我的是 -18.000000,不管我给它什么输入。 总结我尝试过的最好方法:我尝试了 ints 和 floats 的不同组合,但没有成功。 我怀疑它与 printf("%d\n", temp_change(fahrenheit)); 有关,但当一切都是 int 时它给了我正确的答案,所以我不知道。 XD 在此先感谢您的帮助!

您需要更改转换功能。像这样

float temp_change(fahrenheit)
{
    float centigrade;
    centigrade = 5*(fahrenheit - 32)/9.0; //Changing the temperature
    return centigrade;
}

如果你愿意,你也可以采用浮点数的形式输入。在这里

printf("%d\n", temp_change(fahrenheit));

使用 %f 而不是 %d

整数版本不会为您提供最接近的转换温度,而是将温度四舍五入到 0

您的代码中还有一个问题:temp_change 的原型不完整,您忘记指定参数的类型。

这是使用浮点数的更正版本:

#include <stdio.h>

float temp_change(float fahrenheit);

int main(void) {
    for (;;) {
        float fahrenheit;
        printf("Please input a temperature in Fahrenheit.\n");
        if (scanf("%f", &fahrenheit) == 1) {//Obtains degrees F value
            printf("%f\n", temp_change(fahrenheit));
        }
    }
}
//Function to change temperature
float temp_change(float fahrenheit) {
    float centigrade;
    centigrade = 5 * (fahrenheit - 32) / 9; //Changing the temperature
    return centigrade;
}

请注意,您确实应该使用 double 精度浮点数。顺便说一句,temp_change() 的 return 值在传递给 printf 时被转换为 double。格式说明符 %fscanf 使用 float*,但对 printf.

使用 double