将信息存储到C中的变量中

时间:2015-01-29 18:41:44

标签: c variables storage scanf

我为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);
}

3 个答案:

答案 0 :(得分:1)

printf参数一起使用的正确scanfdouble格式为%lf。不是%f,而是%lf。不要将%fdouble一起使用。它应该是

scanf("%lf", &fahrenheit);
...
printf("%lf degrees Fahrenheit is equal to %lf degrees celcius\n",
  fahrenheit, celcius);

请注意,%f将与double中的printf一起使用(不在scanf中),但以这种方式使用它仍然是一个坏习惯,这只会助长流行的初学者误以为printfscanf在某种程度上“不一致”。

格式说明符和参数类型之间的匹配在printfscanf之间定义明确且一致:

  • %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内。

无论

  1. fahrenheit的类型更改为浮动
  2. 将您的scanf电话改为`scanf(&#34;%lf&#34;,&amp; fahrenheit);