Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ++c en 4 Mayo 2014, 23:35 pm



Título: problema con sentencia switch
Publicado por: ++c en 4 Mayo 2014, 23:35 pm
Hola amigos,

tengo un problema a la hora de ejecutar adecuadamente esta sentencia y es a la hora de cuando se introduce en un caso no sale de él, no entiendo porque break no rompe cuando termina la ejecución de la instrucción.

Deseo que el usuario introduzca una opción, seguidamente introduzca un valor, se realice su cálculo de venta de ese producto y por último que muestre el total de venta de todos los productos existentes en la tienda.

También observo que no obedece cuando se introduce un carácter no válido metiéndose en un bucle infinito no acertando porque....


Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(){
  5.  
  6.    int opcion;
  7.    float cantidad,total=0;
  8.  
  9.    printf("En esta tienda se vende 5 productos con los siguientes\n");
  10.    printf("\nPrecios:");
  11.    printf("\nProducto 1: 2,98$");
  12.    printf("\nProducto 2: 4,50$");
  13.    printf("\nProducto 3: 9,98$");
  14.    printf("\nProducto 4: 4,49$");
  15.    printf("\nProducto 5: 6,87$\n");
  16.  
  17.    printf("\nIntroduzca numero de producto. -1 para salir: ");
  18.    scanf("%d",&opcion);
  19.  
  20.    while( opcion != -1){
  21.  
  22.        switch( opcion ){
  23.  
  24.        case 1:
  25.  
  26.            printf("\nIntroduzca cantidad vendida: ");
  27.            scanf("%f",&cantidad);
  28.            printf("El precio de esta venta es: %f",cantidad*2.98);
  29.            total+=cantidad*=2.98;
  30.            break;
  31.  
  32.        case 2:
  33.  
  34.            printf("\nIntroduzca cantidad vendida: ");
  35.            scanf("%f",&cantidad);
  36.            printf("El precio de esta venta es: %f",cantidad*4.50);
  37.            total+=cantidad*=4.50;
  38.            break;
  39.  
  40.        case 3:
  41.  
  42.            printf("\nIntroduzca cantidad vendida: ");
  43.            scanf("%f",&cantidad);
  44.            printf("El precio de esta venta es: %f",cantidad*9.98);
  45.            total+=cantidad*=9.98;
  46.            break;
  47.  
  48.        case 4:
  49.  
  50.            printf("\nIntroduzca cantidad vendida: ");
  51.            scanf("%f",&cantidad);
  52.            printf("El precio de esta venta es: %f",cantidad*4.49);
  53.            total+=cantidad*=4.49;
  54.            break;
  55.  
  56.        case 5:
  57.  
  58.            printf("\nIntroduzca cantidad vendida: ");
  59.            scanf("%f",&cantidad);
  60.            printf("El precio de esta venta es: %f",cantidad*6.87);
  61.            total+=cantidad*=6.87;
  62.            break;
  63.  
  64.        default:
  65.  
  66.            printf("\nIntroduzca numero de producto VALIDO: ");
  67.            break;
  68.  
  69.        }
  70.    }
  71.    printf("\nLas ventas totales fueron: %f\n\n ",total);
  72.    return 0;
  73. }
  74.  

Cualquier aclaración se lo agradecería.

Saludos y muchas gracias

++c


Título: Re: problema con sentencia switch
Publicado por: amchacon en 5 Mayo 2014, 00:50 am
Código
  1. printf("\nIntroduzca numero de producto. -1 para salir: ");
  2. scanf("%d",&opcion);

Esas dos líneas deberían ir dentro del while, no fuera.


Título: Re: problema con sentencia switch
Publicado por: ++c en 6 Mayo 2014, 00:16 am
Hola amchacon gracias por la respuesta, en efecto ese era el problema.

Me gustaría conocer un último matiz que aún no he llegado a aprender y espero conocer adelatándome en materia y es en relación a optimizar el menu de selección cuando se introduce otro carácter distinto a lo estipulado iniciando un bucle infinito.

Dejo el código como lo llevo elaborado:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5.    int opcion;
  6.    float cantidad,total=0;
  7.  
  8.    printf("En esta tienda se vende 5 productos con los siguientes precios:\n");
  9.    printf("\nProducto 1: 2,98$");
  10.    printf("\nProducto 2: 4,50$");
  11.    printf("\nProducto 3: 9,98$");
  12.    printf("\nProducto 4: 4,49$");
  13.    printf("\nProducto 5: 6,87$\n");
  14.  
  15.    while( opcion != -1){
  16.  
  17.        printf("\nIntroduzca numero de producto. -1 para salir: ");
  18.        scanf("%d",&opcion);
  19.  
  20.        switch( opcion ){
  21.  
  22.        case 1:
  23.  
  24.            printf("\nIntroduzca cantidad vendida: ");
  25.            scanf("%f",&cantidad);
  26.            printf("El precio de esta venta es: %f",cantidad*2.98);
  27.            total+=cantidad*=2.98;
  28.            break;
  29.  
  30.        case 2:
  31.  
  32.            printf("\nIntroduzca cantidad vendida: ");
  33.            scanf("%f",&cantidad);
  34.            printf("El precio de esta venta es: %f",cantidad*4.50);
  35.            total+=cantidad*=4.50;
  36.            break;
  37.  
  38.        case 3:
  39.  
  40.            printf("\nIntroduzca cantidad vendida: ");
  41.            scanf("%f",&cantidad);
  42.            printf("El precio de esta venta es: %f",cantidad*9.98);
  43.            total+=cantidad*=9.98;
  44.            break;
  45.  
  46.        case 4:
  47.  
  48.            printf("\nIntroduzca cantidad vendida: ");
  49.            scanf("%f",&cantidad);
  50.            printf("El precio de esta venta es: %f",cantidad*4.49);
  51.            total+=cantidad*=4.49;
  52.            break;
  53.  
  54.        case 5:
  55.  
  56.            printf("\nIntroduzca cantidad vendida: ");
  57.            scanf("%f",&cantidad);
  58.            printf("El precio de esta venta es: %f",cantidad*6.87);
  59.            total+=cantidad*=6.87;
  60.            break;
  61.  
  62.        }
  63.    }
  64.    printf("\nLas ventas totales fueron: %f\n\n ",total);
  65.    return 0;
  66. }
  67.  
  68.  

Saludos y gracias por ayudar a personas que se inician en el mundo de la programación.