2010-06-28 71 views
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打印出一個荒謬的數字,我真的不知道有關C中的變量乘法?正確設置

+0

需要'家庭作業'標籤嗎? – 2010-06-28 21:01:05

+0

不,不同意。 – Atmocreations 2010-06-28 21:18:52

回答

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格式使用錯誤的數據。

+0

謝謝!aoddd – 2010-06-28 20:11:16

+0

很容易想到在控制檯上打印的是變量值.....爲了安全,始終在調試器中檢查實際變量。 – 2010-06-28 20:16:08

4

問題是您正在使用printf輸出float%f說明符,但通過&work傳遞double*。只需刪除&,它應該可以正常工作。

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

爲何會收到一個「荒謬號」的原因是要傳遞的work地址printf()。將&work更改爲work並且它應該正常工作。

3

當然。在printf的行的符號&意味着變量work地址被讀取,而不是

1

嘗試追加d爲常數力C不強制轉換爲int可能會奏效。您也可以嘗試明確地將值轉換爲float或double。

0

您已經給出了&這是工作變量在內存中的地址,所以它不會打印任何荒謬的值,它會打印工作的內存位置。

您應該從&中刪除&以接收工作變量的值。 (「大壩會在%d %%效率下產生%f兆瓦」,work,EFINC2);