从Celsius到Fahrenheit的转换返回0.00

时间:2015-01-27 20:04:09

标签: c

我正在编写一个C程序,将Celsius转换为Fahrenheit,反之亦然。当我从F转换为C时,它运行得很好。但是当我尝试从C转换为F时,我总是得到0.00作为我的返回值。 这是我的代码。

int main (void)
{

int fahrenheit;
double celsius;
int convert;

while (celsius != 0 || fahrenheit != 32) {
    printf("Type 1 if you would like to convert to celsius.\n");
    printf("Type 2 if you would like to convert to fahrenheit.\n");
    scanf("%d", &convert);
    printf("\n");

    if(convert == 1){
        printf("Enter the temperature in degrees fahrenheit:\n");
        scanf("%d", &fahrenheit);
        celsius = (5.0/9.0) * (fahrenheit-32);
        printf ("The converted temperature is %.2f\n", celsius);
        printf ("\n");
        }
    else{
        printf("Enter the temperature in degrees celsius:\n");
        scanf("%d", &celsius);
        fahrenheit = (1.8*celsius) + 32;
        printf ("The converted temperature is %.2f\n", fahrenheit);
        printf ("\n");
        }
    }
return 0;

}

2 个答案:

答案 0 :(得分:7)

scanf("%d", &celsius);
...
printf ("The converted temperature is %.2f\n", fahrenheit);

您将fahrenheit声明为int,将celsius声明为double,因此应切换%f%d格式说明符。

scanf("%lf", &celsius);
...
printf ("The converted temperature is %d\n", fahrenheit);

答案 1 :(得分:1)

在你的代码中,

printf ("The converted temperature is %.2f\n", fahrenheit);

您尝试使用格式说明符int打印一个%f。不是定义的行为。

然后再次

scanf("%d", &celsius);

应该是

scanf("%f", &celsius);  //c89 and above

scanf("%lf", &celsius); //c99 and above

另外,自己初始化本地变量。它们不是 auto 初始化的。否则,如果有时[不太可能但不是不可能],不要感到惊讶

while (celsius != 0 || fahrenheit != 32)

在第一次迭代中失败。