int main (void)
{
int fahrenheit; // fahrenheit stands for fahrenheit
double c; // c stands for celsius
printf("Enter your fahrenheit, we'll covnvert it into celsius! ");
scanf("%f", &fahrenheit);
c = 5/9 * (fahrenheit - 32);
printf("Here is your %f in celsius!.\n");
return (0);
}
我通过断点跟踪代码,当它输入我的输入时计算结束,但公式是正确的。某种逻辑错误,我无法指责。请帮忙!
答案 0 :(得分:6)
scanf
调用使用了错误的格式字符串。您正在阅读int
所以您需要它:
scanf("%d", &fahrenheit);
使用整数除法计算表达式5/9
。事实上,编译器可以在编译时解决它。该表达式的计算结果为0
。
您需要执行浮点除法。例如:
5.0/9
或者:
5/9.0
或者
5.0/9.0
您只需要至少一个操作数作为浮点值。
将它放入你的表达式中,你可以写:
c = 5.0/9.0 * (fahrenheit - 32);
并获得您期望的答案。
您的printf
声明也是错误的。您应该启用警告并让编译器告诉您。你打算写:
printf("Here is your %f in celsius!.\n", c);
答案 1 :(得分:1)
整数数学与浮点数学。
i = 5/9 // i is equal to 0
d = 5.0/9.0 // d is equal to whatever 5 divided by 9 would actually be
您还需要实际打印值:
printf("Here is your %f in celsius!.\n", c);
答案 2 :(得分:0)
简答:即使存储结果的变量是double,整数运算也会返回整数。整数之间的划分被截断。
你应该写这个:
c = 5.0/9.0 * (fahrenheit - 32.0);
在常量中添加“.0”(或者甚至只是“。”)会使它们成为浮点值。