int 产生接近正确的答案,但 float 只给出 -18.000
int produces near correct answer, but float just gives -18.000
我编写了一个简单的程序,使用函数将华氏度转换为摄氏度(已经在 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
([=13= 除外)。现在程序唯一会给我的是 -18.000000
,不管我给它什么输入。
总结我尝试过的最好方法:我尝试了 int
s 和 float
s 的不同组合,但没有成功。
我怀疑它与 printf("%d\n", temp_change(fahrenheit));
有关,但当一切都是 int
时它给了我正确的答案,所以我不知道。 XD
在此先感谢您的帮助!
您需要更改转换功能。像这样
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
整数版本不会为您提供最接近的转换温度,而是将温度四舍五入到 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()
的 return 值在传递给 printf
时被转换为 double
。格式说明符 %f
对 scanf
使用 float*
,但对 printf
.
使用 double
我编写了一个简单的程序,使用函数将华氏度转换为摄氏度(已经在 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
([=13= 除外)。现在程序唯一会给我的是 -18.000000
,不管我给它什么输入。
总结我尝试过的最好方法:我尝试了 int
s 和 float
s 的不同组合,但没有成功。
我怀疑它与 printf("%d\n", temp_change(fahrenheit));
有关,但当一切都是 int
时它给了我正确的答案,所以我不知道。 XD
在此先感谢您的帮助!
您需要更改转换功能。像这样
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
整数版本不会为您提供最接近的转换温度,而是将温度四舍五入到 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()
的 return 值在传递给 printf
时被转换为 double
。格式说明符 %f
对 scanf
使用 float*
,但对 printf
.
double