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

Était-ce utile?

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);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top