为什么这个程序只在第一次输入时给我一个错误计算?

Why does this program give me a miscalculation only on the first input?

这是我尝试在 C 语言中使用一个函数将华氏度转换为摄氏度。令我感到困惑的是它适用于除第一个输入之外的所有输入,我不明白为什么。如果我删除 while 循环并只保留程序中的内容按预期工作但是然后我只能转换一个值然后必须 运行 程序 again.The 输入的第一个值通常是 -16。给我的东西。

作为旁注,任何人都可以推荐一种方法来搜索这些类型的问题,当它的程序特定时?

    #include <stdio.h>

    float fToC(float far);

    int main()
    {
        int c;
        float far;
        while((c = getchar()) != EOF)
        {
        scanf("%f", &far);
        printf("%.2f\n", fToC(far));
        }
        return 0;
     }

    float fToC(float far)
    {
        float C;
        C = (5.0 / 9.0) * (far - 32.0);
        return C;
    }

是否需要getchar()?换行符(隐形字符)也是 被视为输入。它保留在输入缓冲区中并分配给 far.

跳过 getchar(),直接输入 far。 scanf() returns 1 如果输入了适当的输入。 如果像字母一样输入不适当的输入,它将 return 0 并且不会进入循环。

    while((scanf("%f", &far) == 1))
    {
       printf( "far = %f\n", far);
       printf("%.2f\n", fToC(far));
    }

getchar() 吃掉第一个字符,scanf() 无法读取它。从第二次迭代开始,这是可以的:被吃掉的字符将是 '\n',然后是 scanf() 不读取的 ENTER 键。然而,在第一次使用时,该字符很有用:当键入“-16”时为“-”。解决方案:删除 getchar() 并使用跳过白色 space: " %f".

的 scanf 解析格式