我为C类的介绍编写了以下代码。但由于某种原因,我无法弄清楚为什么scanf
不会将输入存储到华氏温度变量中,因此不允许我正确地进行计算。我将起始值从0切换到212,以确保我的计算正确,但它仍然不允许我更新。
#include <stdio.h>
int main(void){
double fahrenheit = 212.00;
double celcius = 0;
//prompt the user for the information
printf("Enter a temperature in degrees Fahrenheit >");
//store the information in the Fahrenheit var.
scanf("%f", &fahrenheit);
//calculate the change in metrics
celcius = (fahrenheit-32)*.5556 ;
printf("%f degrees Fahrenheit is equal to %f degrees celcius\n",fahrenheit,celcius);
}
答案 0 :(得分:1)
与printf
参数一起使用的正确scanf
和double
格式为%lf
。不是%f
,而是%lf
。不要将%f
与double
一起使用。它应该是
scanf("%lf", &fahrenheit);
...
printf("%lf degrees Fahrenheit is equal to %lf degrees celcius\n",
fahrenheit, celcius);
请注意,%f
将与double
中的printf
一起使用(不在scanf
中),但以这种方式使用它仍然是一个坏习惯,这只会助长流行的初学者误以为printf
和scanf
在某种程度上“不一致”。
格式说明符和参数类型之间的匹配在printf
和scanf
之间定义明确且一致:
%f
适用于float
%lf
适用于double
%Lf
适用于long double
。答案 1 :(得分:0)
您已将变量声明为double fahrenheit;
,但使用了scanf()
的{{1}}说明符,请尝试此操作
float
或将#include <stdio.h>
int main(void) {
float fahrenheit = 212.00;
/* ^ float, instead of double */
float celcius = 0;
// prompt the user for the information
printf("Enter a temperature in degrees Fahrenheit > ");
// store the information in the Fahrenheit var.
if (scanf("%f", &fahrenheit) != 1) // check that scanf succeeded
return -1;
// calculate the change in metrics
celcius = (fahrenheit-32)*.5556 ;
printf("%f degrees Fahrenheit is equal to %f degrees celcius\n",fahrenheit,celcius);
return 0;
}
说明符更改为scanf()
"%lf"
说明符对两者都可以。
此外,您最好确保printf()
成功阅读。
答案 2 :(得分:0)
您正在阅读浮动(使用%f
),但您已将其存储在double
内。
无论
fahrenheit
的类型更改为浮动scanf
电话改为`scanf(&#34;%lf&#34;,&amp; fahrenheit);