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