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

时间:2017-05-10 00:24:52

标签: c temperature

这是我在C中使用函数将华氏温度转换为摄氏温度的尝试。令我感到困惑的是,它适用于除第一个以外的所有输入,我无法弄清楚原因。如果我删除while循环,只是留下程序内部的工作正常,但我只能转换一个值,然后再次运行程序。输入的第一个值通常是-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;
    }

2 个答案:

答案 0 :(得分:3)

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

跳过getchar(),然后输入far。 如果输入了适当的输入,scanf()将返回1。 如果输入的输入不正确就像字母一样,它将返回0并且不会进入循环内。

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

答案 1 :(得分:1)

getchar()吃第一个字符,scanf()无法读取它。从第二次迭代开始,这是可以的:被吃掉的字符将是&#39; \ n&#39;,然后是scanf()不读取的ENTER键。然而,第一次,角色是一个有用的角色:&#39; - &#39;什么时候&#34; -16&#34;输入。解决方案:删除getchar()并使用跳过空格的scanf解析格式:&#34; %F&#34;