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は動作するポインタです。つまり、値を出力するdouble*には、ポインタではなく、printfを渡す必要がありdoubleます。プラットフォームでは、adouble*はおそらくサイズが異なるためdouble、後続のprintfフォーマットで間違ったデータが使用されます。

于 2010-06-28T20:09:54.050 に答える
4

問題は、printfが指定子を使用しfloatてaを出力しているが、 via%fを渡していることです。を削除するだけで、正常に動作するはずです。 double*&work&

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

「ばかげた番号」を受け取った理由は、のアドレスをに渡したためworkですprintf()。に変更&workするworkと、正しく機能するはずです。

于 2010-06-28T20:11:00.193 に答える
3

もちろん。&printf-lineのアンパサンドは、の代わりに変数のアドレス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 に答える