【问题标题】:C program to convert Fahrenheit to Celsius always prints zero将华氏温度转换为摄氏温度的 C 程序总是打印零
【发布时间】:2011-02-03 19:02:51
【问题描述】:

我需要一些关于在 C 中将华氏温度转换为摄氏度的程序的帮助。我的代码如下所示

#include <stdio.h>
int main(void)
{
    int fahrenheit;
    double celsius;

    printf("Enter the temperature in degrees fahrenheit:\n\n\n\n");
    scanf("%d", &fahrenheit);
    celsius = (5 / 9) * (fahrenheit - 32);
    printf("The converted temperature is %lf\n", celsius);

    return 0;
}

每次我执行它,结果都是 0.000000。我知道我错过了一些东西,但不知道是什么。

【问题讨论】:

  • 您正在使用整数,您需要使用浮点数或双精度数。
  • 旁注,编译器通常认为 5.0 是双倍的。您必须说 5.0f 才能进行浮点值计算。似乎与移动更相关

标签: c


【解决方案1】:

5/9 将导致整数除法,这将 = 0

改用5.0/9.0。

【讨论】:

  • 从技术上讲,5/9.0 就足够了
  • @FooBah:你当然是正确的。为了我自己的良好实践,我倾向于将它应用于这两种情况。
  • @Foo Bah - 也许吧,但避免尽可能多的隐式转换是一个好策略。编译器为您更改的类型越少,您的惊喜就越少。
  • @T.E.D.在这种情况下,fahrenheit 和 32 也必须转换为 double ;-) 一般来说,如果我们要避免到处出现“隐式转换”,这样的表达式就会有大量的转换。恕我直言,理解比避免更重要,尤其是在 C 语言中,因为隐式转换、类型提升等是 C 编程中的一个事实。
【解决方案2】:

你的问题在这里:

celsius = (5/9) * (fahrenheit-32);

5/9 将永远给你0。请改用 (5.0/9.0)。

【讨论】:

    【解决方案3】:

    试试celsius = ((double)5/9) * (fahrenheit-32); 或者你可以使用5.0。

    事实上,“/”查看的是操作数类型。如果是 int,结果也是 int,所以你有 0。当 5 被视为 double 时,除法将被正确执行。

    【讨论】:

      【解决方案4】:

      写 5/9.0 而不是 5/9 -- 这会强制双重除法

      【讨论】:

      • 感谢大家的帮助,5.0/9.0 成功了,切换到双倍也有效。再次感谢
      【解决方案5】:

      您需要使用浮点运算才能以任何精度执行这些类型的公式。如果需要,您始终可以将最终结果转换回整数。

      【讨论】:

        【解决方案6】:

        处理浮点数时,需要为 5.0f / 9.0f。

        处理双打时,需要为 5.0 / 9.0。

        处理整数时,余数/分数总是被截断。 5 / 9 结果介于 0 和 1 之间,因此每次都被截断为 0。这将另一边乘以零,并且每次都完全使您的答案无效。

        【讨论】:

          【解决方案7】:

          5 和 9 属于 int 类型
          因此5/9 总是会产生0。

          您可以使用5/9.0 或5.0/9 或5.0/9.0

          您也可以查看C program for converting Fahrenheit into Celsius

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-08
            • 1970-01-01
            • 2021-10-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多