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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top