这是我在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;
}
答案 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;