El progtwig se detiene después de mostrar el resultado

Quiero poder tomar la cantidad adeudada de alguien como el precio, y luego hacer algunos cálculos de la cantidad recibida e imprimir mi resultado.

A continuación se muestra el código que se me ocurrió. Sin embargo, mi progtwig no se ejecuta después de mostrar la cantidad entregada.

¿Alguna idea?

Tenga en cuenta que es la primera vez que codifico en C y soy 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; } 

Tengo una versión alternativa de ese código, que cambia la primera parte de escaneo e impresión a

  /* 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 ... */ 

Y tengo una tercera versión, donde el primer escaneo e impresión es así.

  /* 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 ... */ 

Tiene el problema de comparar un valor de punto flotante para la identidad
(o por no ser idéntico, mismo problema) aquí:

 while(changeDue!=0.00){ 

Vea aquí para algunos antecedentes:
¿Es rota la matemática de punto flotante?

Crea un bucle sin fin (al menos si no es “afortunado”), lo que evita que se siga imprimiendo. (En realidad, “suerte” no es una buena descripción para ocultar un error …)
Para verificar este diagnóstico, inserte un printf al inicio del bucle.

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

Verá muchos más de esa línea de salida de depuración de lo que espera.

Con el fin de resolver ese problema de bucle sin fin, cambiar a

 while(changeDue>=0.01) 

y se resuelve el bucle sin fin, que actualmente evita que algo visible ocurra después de imprimir la cantidad debida.

Esto no necesariamente soluciona todos los problemas en su código, pero se resuelve el más prominente descrito en su pregunta.

Tenga en cuenta que uno de los comentarios recomienda utilizar int para la moneda.
Normalmente estoy de acuerdo, pero he aceptado su statement de que tiene que usar float / double.

Por cierto, usa la primera versión del código.
En la segunda versión está imprimiendo la dirección de algo en lugar del valor. Es decir, el & está equivocado aquí:

 printf("%d", &tendered); 

En la tercera versión, sus tipos y la cadena de formato en printf no coinciden.