Je n'arrive pas à comprendre pourquoi cela fonctionne pour 90% des entrées, mais pas pour les autres. Il est destiné à vous dire combien de pièces vous retiendrez en changement. La plupart des montants de test fonctionnent bien, mais si vous entrez 4,20 (ou 4,20 $), il renvoie 23 pièces ... il devrait être de 18 pièces (16 quarts et 2 nickels). Où est le bug? Voici mon code:Petit bug dans mon code C court. Pourquoi?
#include <stdio.h>
#include <cs50.h>
int main(void){
float change = 0.00;
printf("How much change is owed? ");
change = GetFloat();
float quarters = change/.25;
change-= (int)quarters*.25;
float dimes = change/.10;
change-= (int)dimes*.10;
float nickels = change/.05;
change-= (int)nickels*.05;
float pennies = (change+.005)/.01;
change-=(int)pennies*.01;
int total = (int)quarters+(int)dimes+(int)nickels+(int)pennies;
printf("%d\n", total);
return 0;
}
Vous ne devez jamais utiliser les nombres à virgule flottante pour représenter l'argent en premier lieu. –
Puisque tout est un multiple de 1 cent, pourquoi ne pas tout stocker comme un nombre entier de centimes? Vous éviterez ainsi tous les problèmes liés aux virgules flottantes. –
Ceci est un devoir qui est censé enseigner les fonctions de flotteur, c'est la seule raison pour laquelle il est écrit comme il est. C'est juste bizarre que la plupart des entrées fonctionnent bien, seulement certains chiffres ne le font pas. Je ne peux pas le réécrire en utilisant différentes classes ou quoi que ce soit, parce que c'est la façon dont le professeur veut le voir. –