Variabile Moltiplicazione in C?
-
01-10-2019 - |
Domanda
//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;
}
I valori impostato correttamente, ho provato da averlo stampare altezza e la massa, ma il lavoro non riceve mai un valore, e EFINC2 stampa un numero ridicolo che io non sono veramente sicuro di
Soluzione
printf("The dam would produce %f megawatts at %d%% efficency", &work, EFINC2);
dovrebbero essere:
printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
&work
è un puntatore al lavoro, vale a dire un double*
ma per printf
per stampare il valore è necessario passare un double
e non un puntatore. Sulla vostra piattaforma di un double*
è probabilmente una dimensione diversa a un double
causando i successivi formati printf
di utilizzare i dati sbagliati.
Altri suggerimenti
Il problema è che si stanno avendo uscita printf un float
con l'identificatore %f
ma passando in un double*
via &work
. Basta togliere il &
e dovrebbe funzionare bene.
printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
Il motivo per cui si riceve un "numero ridicolo" è che si passa l'indirizzo del work
a printf()
. Cambiare &work
per work
e dovrebbe funzionare correttamente.
Certo. Il &
commerciale nei mezzi printf linea che il indirizzo della work
variabile viene letta invece del valore
Prova aggiungendo un d per le costanti di forza c di non lanciare per lavoro potrebbe int. Si potrebbe anche provare in modo esplicito la fusione dei valori a uno float o doppio.
ti hanno dato e il lavoro, che è l'indirizzo della variabile di lavoro in memoria, in modo che non viene stampato alcun valore assurdo, stampa la locazione di memoria di lavoro.
Si dovrebbe rimuovere e da e lavoro per ricevere valore della variabile di lavoro.
printf ( "La diga avrebbe prodotto% f megawatt a% d %% efficienza", il lavoro, EFINC2);