Ver Mensaje Individual
  #9 (permalink)  
Antiguo 24/03/2016, 09:29
morbo198
 
Fecha de Ingreso: febrero-2011
Mensajes: 41
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Validar entrada de datos

Cita:
Iniciado por vizen Ver Mensaje
hola morbo, te envio una posible solucion, las abra mejores pero esta funciona

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. enum {no,si};
  5.  
  6. const int max_nbol = 150; // número maximo de asientos en la sala
  7. const int precio = 45;
  8.  
  9. void menu_error(int nBoletos, int total);
  10.  
  11. int main()
  12. {
  13.   int nBoletos, total, pago, cambio;
  14.  
  15.   for(;;){
  16.  
  17.     /*Datos de entrada*/
  18.     int repetir=si;
  19.     do{
  20.       printf("************ Venta de Boletos CineESAD ************\n\n"
  21.              "Para salir del programa introduzca un \'0\'\n\n"
  22.              "Proporcione el numero de boletos que desea comprar:\t");
  23.       scanf("%d",&nBoletos);
  24.  
  25.       if(nBoletos>=0 && nBoletos<=max_nbol) repetir=no;
  26.       else system("clear");
  27.     }while(repetir);
  28.  
  29.     if(nBoletos==0) break;
  30.  
  31.     /*Calcula el total de la venta y mostramos el total en pantalla*/
  32.     total = nBoletos * precio;
  33.     printf("\nEl monto a pagar es: %d\n\n\n\n",total);
  34.  
  35.     /*Lee el pago*/
  36.     printf("Indique el monto pagado: ");
  37.     do
  38.     {
  39.       scanf("%d",&pago);
  40.       if (pago < total) menu_error(nBoletos, total);
  41.     } while(pago < total);
  42.  
  43.     /*Calculo del cambio*/
  44.     cambio = pago - total;
  45.     printf("\n\n El monto de su cambio es %d\n",cambio);
  46.  
  47.     if ((cambio/200)>=1)
  48.     {
  49.       printf("\n\t%d billetes de $200", cambio/200);
  50.       cambio = cambio % 200;/*calculando el residuo*/
  51.     }
  52.  
  53.     if ((cambio/100)>=1)
  54.     {
  55.       printf("\n\t%d billetes de $100", cambio/100);
  56.       cambio = cambio % 100;/*calculando el residuo*/
  57.     }
  58.  
  59.     if ((cambio/50)>=1)
  60.     {
  61.       printf("\n\t%d billetes de $50", cambio/50);
  62.       cambio = cambio % 50;/*calculando el residuo*/
  63.     }
  64.  
  65.     if ((cambio/20)>=1)
  66.     {
  67.       printf("\n\t%d billetes de $20", cambio/20);
  68.       cambio = cambio % 20;/*calculando el residuo*/
  69.     }
  70.  
  71.     if ((cambio/10)>=1)
  72.     {
  73.       printf("\n\t%d monedas de $10", cambio/10);
  74.       cambio = cambio % 10;/*calculando el residuo*/
  75.     }
  76.  
  77.  
  78.     if ((cambio/5)>=1)
  79.     {
  80.       printf("\n\t%d monedas de $5", cambio/5);
  81.       cambio = cambio % 5;/*calculando el residuo*/
  82.     }
  83.  
  84.     if ((cambio/2)>=1)
  85.     {
  86.       printf("\n\t%d monedas de $2", cambio/2);
  87.       cambio = cambio % 2;/*calculando el residuo*/
  88.     }
  89.  
  90.     if ((cambio/1)>=1)
  91.     {
  92.       printf("\n\t%d monedas de $1", cambio/1);
  93.       cambio = cambio % 1;/*calculando el residuo*/
  94.     }
  95.  
  96.     printf("\n");
  97.  
  98.     char c;
  99.     scanf("%c[\r]", &c);
  100.     system("clear");
  101.  
  102.   }
  103.   return 0;
  104. }
  105.  
  106. /* si hay un error en el total pagado se visuliza este menu */
  107. void menu_error(int nBoletos, int total){
  108.  
  109.   system("clear");
  110.   printf("************ Venta de Boletos CineESAD ************\n\n"
  111.          "Para salir del programa introduzca un \'0\'\n\n"
  112.          "Proporcione el numero de boletos que desea comprar:\t%i\n\n"
  113.          "El monto a pagar es: %d\n\n"
  114.          "El monto pagado debe de ser mayor o igual al total\a\a\n\n"
  115.          "Indique el monto pagado: ", nBoletos, total);
  116. }

suerte
gracias por tu ayuda :D