2010-06-28 3 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; 
} 

Les valeurs définies correctement, 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 deMultiplication variable en C?

+0

Vous avez besoin d'une étiquette 'homework'? –

+0

non, pas d'accord. – Atmocreations

Répondre

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

devrait lire:

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

&work est un pointeur de travail, soit une double* mais pour printf pour imprimer la valeur que vous devez passer un double et non un pointeur. Sur votre plate-forme, une taille double* est probablement d'une taille différente à double entraînant l'utilisation des mauvaises données par les formats printf suivants.

+0

MERCI! Aoddd –

+0

Il est facile de penser que ce qui est imprimé sur la console est la valeur des variables ..... pour être sûr toujours vérifier la variable réelle dans le débogueur. –

4

Le problème est que printf affiche un float avec le spécificateur %f mais en passant un double* via &work. Il suffit de retirer le & et cela devrait fonctionner correctement.

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

La raison pour laquelle vous recevez un « nombre ridicule » est que vous passez l'adresse de work à printf(). Remplacez &work par work et cela devrait fonctionner correctement.

3

Bien sûr. L'esperluette & dans les moyens printf en ligne que la adresse de la work variable est en lecture au lieu de la valeur

1

Essayez une d annexant aux constantes de forcer c à ne pas jeter int pourrait fonctionner. Vous pouvez également essayer de convertir explicitement les valeurs en float ou en double.

0

vous avez donné & travail qui est l'adresse de travail variable en mémoire, de sorte qu'il n'imprime aucune valeur absurde, il imprime l'emplacement de mémoire de travail.

Vous devez supprimer & de & pour obtenir la valeur de la variable de travail. Printf ("La digue produirait% f mégawatts à% d %% d'efficacité", travail, EFINC2);