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

时间:2015-07-02 00:55:49

标签: c floating-point integer temperature

我编写了一个简单的程序,使用函数将华氏度转换为摄氏度(已经使用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 s(int main()除外。现在程序唯一能给我的是-18.000000,不管我给它什么输入。 总结我尝试过的最佳方式:我尝试了intfloat的不同组合,但没有运气。 我怀疑它与printf("%d\n", temp_change(fahrenheit));有关但当一切都是int时它给了我正确的答案,所以我不知道。 XD 在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您需要更改转换功能。喜欢这个

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

答案 1 :(得分:1)

整数版本没有给出最接近的转换温度,它将温度四舍五入到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()的返回值在传递给double时会转换为printf。格式说明符%ffloat*采用scanfdouble采用printf