C中的变量乘法?

时间:2010-06-28 20:07:59

标签: c variables constants multiplication

//Hydroelectric Dam Helper
#include <stdio.h>
#define GRAV 9.80
#define EFINC 0.9
#define EFINC2 90


int main()
{
  //Defines all the variables to be used
  double height, work, mass;
  printf("Height of dam (in meters):");
  scanf("%lf", &height);
  printf("Flow of water (in thousand cubic meters per second):");
  scanf("%lf", &mass);
  work = (mass * GRAV * height * EFINC); 
  printf("The dam would produce %f megawatts at %d%% efficency", &work, EFINC2);
  return 0; 
}

值设置正确,我通过打印高度和质量来测试它,但是工作永远不会收到值,EFINC2打印出一个我不太确定的荒谬数字

6 个答案:

答案 0 :(得分:7)

printf("The dam would produce %f megawatts at %d%% efficency", &work, EFINC2);

应为:

printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);

&work是指向工作的指针,即double*,但printf打印传递double而不是指针所需的值。在您的平台上,double*可能与double的大小不同,导致后续的printf格式使用错误的数据。

答案 1 :(得分:4)

问题在于,您使用float说明符输出%f,但通过double*传递&work。只需删除&即可正常使用。

printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);

答案 2 :(得分:3)

您收到“荒谬号码”的原因是您将work的地址传递给printf()。将&work更改为work,它应该可以正常运行。

答案 3 :(得分:3)

不确定。 printf行中的&符号&表示读取变量work地址而不是

答案 4 :(得分:1)

尝试将d附加到常量以强制c不能转换为int可能有效。您还可以尝试将值显式地转换为float或double。

答案 5 :(得分:0)

你给了&amp; work这是内存中工作变量的地址,因此它不会打印任何荒谬的值,它会打印工作的内存位置。

你应该删除&amp;从&amp; work到工作变量的价值。

printf(“大坝将以%d %%效率产生%f兆瓦”,工作,EFINC2);