我编写了一个简单的程序,使用函数将华氏度转换为摄氏度(已经使用Python工作了2周,想要自己刷新):
#include <stdio.h>
#include <math.h>
int temp_change(fahrenheit);
int main()
{
while(1)
{
int fahrenheit;
printf("Please input a temperature in Fahrenheit.\n");
scanf("%d", &fahrenheit); //Obtains degrees F value
printf("%d\n", temp_change(fahrenheit));
}
}
//Function to change temperature
int temp_change(fahrenheit)
{
int centigrade;
centigrade = 5*(fahrenheit - 32)/9; //Changing the temperature
return centigrade;
}
它给了我正确的答案(最接近的程度)。但是,我想要确切的答案,所以我将所有int
更改为float
s(int main()
除外。现在程序唯一能给我的是-18.000000
,不管我给它什么输入。
总结我尝试过的最佳方式:我尝试了int
和float
的不同组合,但没有运气。
我怀疑它与printf("%d\n", temp_change(fahrenheit));
有关但当一切都是int
时它给了我正确的答案,所以我不知道。 XD
在此先感谢您的帮助!
答案 0 :(得分:1)
您需要更改转换功能。喜欢这个
float temp_change(fahrenheit)
{
float centigrade;
centigrade = 5*(fahrenheit - 32)/9.0; //Changing the temperature
return centigrade;
}
如果你想要,你也可以在浮动中获取输入。在这里
printf("%d\n", temp_change(fahrenheit));
使用%f而不是%d
答案 1 :(得分:1)
整数版本没有给出最接近的转换温度,它将温度四舍五入到0
。
您的代码中还有另一个问题:temp_change
的原型不完整,您忘记指定参数的类型。
以下是使用浮点数的修正版本:
#include <stdio.h>
float temp_change(float fahrenheit);
int main(void) {
for (;;) {
float fahrenheit;
printf("Please input a temperature in Fahrenheit.\n");
if (scanf("%f", &fahrenheit) == 1) {//Obtains degrees F value
printf("%f\n", temp_change(fahrenheit));
}
}
}
//Function to change temperature
float temp_change(float fahrenheit) {
float centigrade;
centigrade = 5 * (fahrenheit - 32) / 9; //Changing the temperature
return centigrade;
}
请注意,您应该使用double
精度浮点数。顺便提一下,temp_change()
的返回值在传递给double
时会转换为printf
。格式说明符%f
对float*
采用scanf
,double
采用printf
。