C dans multiplications de variables?
-
01-10-2019 - |
Question
//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;
}
Les valeurs correctement réglée, je l'ai testé en la faisant imprimer la hauteur et la masse, mais le travail ne reçoit jamais une valeur et EFINC2 imprime un nombre ridicule que je ne suis pas vraiment sûr de
La solution
printf("The dam would produce %f megawatts at %d%% efficency", &work, EFINC2);
lire:
printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
&work
est un pointeur au travail, à savoir un double*
mais pour printf
pour imprimer la valeur que vous devez passer un double
et non un pointeur. Sur votre plate-forme un double*
est probablement une taille différente à un double
provoquant les formats printf
ultérieurs d'utiliser les données incorrectes.
Autres conseils
Le problème est que vous avez sortie printf un float
avec le prescripteur de %f
mais en passant dans un double*
via &work
. Il suffit de retirer le &
et il devrait fonctionner correctement.
printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
La raison pour laquelle vous recevez un « nombre ridicule » est que vous passez l'adresse de work
à printf()
. Changement &work
à work
et il devrait fonctionner correctement.
Bien sûr. Le &
esperluette dans le moyen de ligne de printf adresse de la work
variable est lue au lieu de la valeur
Essayez un d annexant aux constantes de la force c de ne pas jeter au travail int force. Vous pouvez également essayer de coulée de façon explicite les valeurs à virgule flottante ou soit double.
vous avez donné et le travail qui est l'adresse de la variable de travail dans la mémoire, il n'imprime pas de valeur absurde, il imprime l'emplacement de la mémoire de travail.
Vous devez supprimer et de recevoir et travail valeur de la variable de travail.
printf ( "Le barrage produirait% f mégawatts à% d %% efficency", le travail, EFINC2);