1
//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 打印出一个我不太确定的荒谬数字

4

6 回答 6

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是一个指向工作的指针,即a double*but forprintf打印您需要传递adouble而不是指针的值。在您的平台上,adouble*的大小可能与double导致后续printf格式使用错误数据的 a 不同。

于 2010-06-28T20:09:54.050 回答
4

问题是您的 printf 输出float带有说明%f符,但传入了double*via &work。只需删除&它,它应该可以正常工作。

printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
于 2010-06-28T20:10:06.620 回答
3

您收到“荒谬数字”的原因是您正在传递workto的地址printf()。更改&workwork,它应该可以正常工作。

于 2010-06-28T20:11:00.193 回答
3

当然。&printf 行中的 &表示读取的是变量的地址work而不是

于 2010-06-28T20:11:31.967 回答
1

尝试将 ad 附加到常量以强制 c 不强制转换为 int 可能会起作用。您还可以尝试将值显式转换为 float 或 double。

于 2010-06-28T20:11:45.947 回答
0

你已经给出了 &work ,它是内存中工作变量的地址,所以它不会打印任何荒谬的值,它会打印工作的内存位置。

您应该从 &work 中删除 & 以接收工作变量的值。

printf("大坝将以 %d%% 的效率发电 %f 兆瓦", work, EFINC2);

于 2010-06-29T06:34:16.697 回答