C: convertir Farenheit en Celsius

int main (void) { int fahrenheit; // fahrenheit stands for fahrenheit double c; // c stands for celsius printf("Enter your fahrenheit, we'll covnvert it into celsius! "); scanf("%f", &fahrenheit); c = 5/9 * (fahrenheit - 32); printf("Here is your %f in celsius!.\n"); return (0); } 

J’ai suivi le code par des points d’arrêt et lorsque cela est pris en compte, les calculs sont faussés, mais la formule est correcte. Une sorte d’erreur logique sur laquelle je ne peux pas mettre le doigt. S’il vous plaît aider!

L’appel de scanf utilise la chaîne de format incorrecte. Vous lisez un int , vous en avez donc besoin:

 scanf("%d", &fahrenheit); 

L’expression 5/9 est évaluée à l’aide de la division entière. En fait, le compilateur peut résoudre le problème au moment de la compilation. Cette expression est évaluée à 0 .

Vous devez effectuer une division en virgule flottante. Par exemple:

 5.0/9 

Ou:

 5/9.0 

Ou

 5.0/9.0 

Vous avez juste besoin que au moins un opérande soit une valeur à virgule flottante.

En mettant cela dans votre expression, vous pouvez écrire:

 c = 5.0/9.0 * (fahrenheit - 32); 

et obtenez la réponse que vous attendez.


Votre déclaration printf est également fausse. Vous devez activer les avertissements et laisser le compilateur vous le dire. Vous vouliez écrire:

 printf("Here is your %f in celsius!.\n", c); 

Calculs entiers contre calculs à virgule flottante

 i = 5/9 // i is equal to 0 d = 5.0/9.0 // d is equal to whatever 5 divided by 9 would actually be 

Vous devez également imprimer la valeur:

 printf("Here is your %f in celsius!.\n", c); 

Réponse courte: Les opérations sur les entiers renvoient des entiers même si la variable sur laquelle vous stockez le résultat est un double. Les divisions entre les entiers sont tronquées.

Vous devriez écrire ceci à la place:

 c = 5.0/9.0 * (fahrenheit - 32.0); 

Ajouter un “.0” (ou même simplement un “.”) À votre constante en fait des valeurs à virgule flottante.