我正在尝试编写一个程序,使用户可以将华氏温度转换为摄氏温度,或将摄氏温度转换为华氏温度。当我运行程序时,我输入68并返回-17.78而不是应该的20。
我浏览了许多不同的论坛,唯一能找到的解决方案是将数据类型从整数更改为双精度,但我已经做到了。
double temp;
printf("Input temperature in degrees Fahrenheit:");
scanf("%.2f", &temp);
temp = (5.0f/9.0f)*(temp-32.0f);
printf("The temperature in Celsius is %.2f.", temp);
return 0;
在纸上,我似乎一切都正确,我缺少什么吗?
答案 0 :(得分:5)
为什么我的方程式无法将华氏温度转换为摄氏温度?
未完全启用编译器警告。
array([4., 5., 4., ..., 4., 4., 5.])
需要scanf("%f", ...);
,而不是提供的float *
。
double *
-> "%.2f"
中的精度是未定义的行为。简单地删除那个。 scanf()
不提供对精度的限制输入。
scanf()
我建议在您的double temp;
printf("Input temperature in degrees Fahrenheit:");
// scanf("%.2f", &temp);
scanf("%lf", &temp);
后面加上'\n'
。
printf()
答案 1 :(得分:1)
我这样更改了您的程序,一切看起来都很好:
int main()
{
float temp;
printf("Input temperature in degrees Fahrenheit:");
scanf("%f", &temp);
temp = (5.0f/9.0f)*(temp-32.0f);
printf("The temperature in Celsius is %.2f.", temp);
return 0;
}
也请注意编译器警告。例如,您的代码编译器说warning: C4476: 'scanf' : unknown type field character '.' in format specifier
,所以我从.
参数中删除了scanf
。