Le programme s’arrête après l’affichage du résultat

Je veux pouvoir prendre le montant dû à quelqu’un comme prix, puis faire un calcul avec le montant reçu et imprimer mon résultat.

Ci-dessous le code que je suis venu avec. Cependant, mon programme ne s’exécute pas après avoir indiqué le montant versé.

Des pensées?

Notez que c’est la première fois que je code en C et que je viens de Java.

#include  int main (void) { double tendered; double changeDue; double price; int hundred=0; int twenty=0; int ten=0; int five=0; int toonoe=0; int loonie=0; int quarter=0; int dime=0; int nickle=0; int penny=0; /* Statements to be executed */ printf("Total purchase price and tendered amount"); scanf("%lf%lf", &price, &tendered); printf("The sum of %lf and %lf is ", tendered,price); changeDue=tendered-price; while(changeDue!=0.00){ if(changeDue<=100.00){ changeDue=changeDue-100.00; hundred=hundred+1; } if(changeDue<=20.00){ changeDue=changeDue-20.00; twenty=twenty+1; } if(changeDue<=10){ changeDue=changeDue-10.00; ten=ten+1; } if(changeDue<=5){ changeDue=changeDue-5.00; five=five+1; } if(changeDue<=2){ changeDue=changeDue-2.00; toonoe=toonoe+1; } if(changeDue1){ for(int i=0;i=0.25){ changeDue=changeDue-0.25; quarter=quarter+1; } if(i==0.10&&changeDue>=0.10){ changeDue=changeDue-0.10; dime=dime+1; } if(i==0.05&&changeDue>=0.05){ changeDue=changeDue-0.05; nickle=nickle+1; } if(i==0.01&&changeDue<0.05){ changeDue=changeDue-0.01; penny=penny+1; } } } } if(hundred!=0){ printf("%d hundred$ bills given as change",hundred); } if(twenty!=0){ printf("%d twenty$ bills given as change",twenty); } if(ten!=0){ printf("%d ten$ bills given as change",ten); } if(five!=0){ printf("%d five$ bills given as change",five); } if(toonoe!=0){ printf("%d toonie coins given as change",toonoe); } if(loonie!=0){ printf("%d loonie coins given as change",loonie); } if(quarter!=0){ printf("%d quarter coins given as change",quarter); } if(dime!=0){ printf("%d dime coins given as change",dime); } if(nickle!=0){ printf("%d nicke coins given as change",nickle); } if(penny!=0){ printf("%d penny coins given as change",penny); } return 0; } 

J’ai une version alternative de ce code, qui modifie la première partie de la numérisation et de l’impression en

  /* identical to start of first version ... */ /* Statements to be executed */ printf("Total purchase price"); scanf("%d", &price); printf("Enter amount recieved by customer "); scanf("%d", &tendered); printf("%d", &tendered); printf("%d",&tendered); changeDue=tendered-price; /* identical to end of first version ... */ 

Et j’ai une troisième version, où la première numérisation et l’impression est comme ça.

  /* identical to start of first version ... */ float tendered; float changeDue; float price; int hundred=0; int twenty=0; int ten=0; int five=0; float toonoe=0; float loonie=0; float quarter=0; float dime=0; float nickle=0; float penny=0; /* Statements to be executed */ printf("Total purchase price"); scanf("%f", &price); printf("Enter amount recieved by customer "); scanf("%f", &tendered); printf("%f tendered", tendered); changeDue=tendered-price; /* identical to end of first version ... */ 

Vous avez le problème de comparer une valeur à virgule flottante pour identité
(ou pour ne pas être identique, même problème) ici:

 while(changeDue!=0.00){ 

Voir ici pour quelques informations:
Les calculs en virgule flottante sont-ils cassés?

Cela crée une boucle sans fin (du moins si vous n’êtes pas «chanceux»), ce qui empêche toute impression ultérieure. (En fait, “chanceux” n’est pas une bonne description pour cacher un bug …)
Afin de vérifier ce diagnostic, insérez un printf au début de la boucle.

 while(changeDue!=0.00){ printf("Making change...\n"); 

Vous verrez beaucoup plus de cette ligne de sortie de débogage que prévu.

Pour résoudre ce problème de boucle sans fin, passez à

 while(changeDue>=0.01) 

et la boucle sans fin est résolue, ce qui évite actuellement tout ce qui est visible après l’impression du montant dû.

Cela ne résout pas nécessairement tous les problèmes de votre code, mais le problème le plus important décrit dans votre question est résolu.

Notez que l’un des commentaires recommande d’utiliser int pour la devise.
Je suis normalement d’accord, mais j’ai accepté votre déclaration selon laquelle vous devez utiliser float / double.

Au fait, utilisez la première version du code.
Dans la deuxième version, vous imprimez l’adresse de quelque chose au lieu de la valeur. C’est-à-dire que le & est faux ici:

 printf("%d", &tendered); 

Dans la troisième version, vos types et la chaîne de format dans printf ne correspondent pas.