Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/04/2015, 23:13
DarkScripter
 
Fecha de Ingreso: abril-2015
Ubicación: En mi casa
Mensajes: 15
Antigüedad: 9 años
Puntos: 0
Pregunta Duda con Switch - Case

Buenas, bueno primero antes que nada permitanme aclararles que en esto del lenguaje C++ como tal estoy viendo lo básico en la universidad que estudio, por lo tanto suelo perderme un poco de acuerdo a los términos técnicos planteados en el problema.

Bien, el problema es el siguiente, una de las actividades fue que debemos hacer un programa en el cual se debe introducir el monto total de una compra, luego de ello escribir el color de una pelota que retiras al realizar la compra y de acuerdo al color que aparezca, obtienes un descuento.

El código que planteó el profesor fue el siguiente:
Código C++:
Ver original
  1. /*
  2. ===================================================================================
  3. En una tienda de descuento se efectúa una promoción en la cual se hace un descuento
  4. sobre el valor de la compra total según el color de la bolita que el cliente
  5. saque al pagar en caja. Si la bolita es de color blanco no se le hará
  6. descuento alguno, si es verde se le hará un 10% de descuento,
  7. si es amarilla un 25%, si es azul un 50% y si es roja un 100%.
  8. Determinar la cantidad final que el cliente deberá pagar por su compra.
  9. se sabe que solo hay bolitas de los colores mencionados.
  10. ===================================================================================
  11. */
  12. #include <stdio.h>  //  Archivo de la biblioteca estándar de Entrada/Salida.
  13. #include <math.h> // archivo estandar de la biblioteca de matematicas
  14. #include <stdlib.h> // Aritméticas, Números aleatorios; y • Conversión de cadenas.
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.   char mensaje;
  19.   float Monto, Descuento, TotalPagar;
  20.   const Azul= Azul;
  21.  
  22.   printf("Dime el Monto de la Compra= ");
  23.   scanf("%f", &Monto);  
  24.   printf("=============================================================\n");
  25.   printf("Dime El Color que Recibiste\n");
  26.   scanf("%s",&mensaje);
  27.   printf("=============================================================\n");
  28.  
  29.   switch (mensaje)
  30.   {  
  31.     case 'Blanco':
  32.     case 'blanco':
  33.     case 'BLANCO':
  34.             Descuento= 0;
  35.             printf("El Descuento por la Compra es: %f\n",Descuento);
  36.             break;          
  37.     case 'Verde':  
  38.     case 'verde':
  39.     case 'VERDE':          
  40.             Descuento= ( Monto * 0.10);
  41.             printf("El Descuento por la Compra es: %f\n",Descuento);
  42.             break;            
  43.     case 'Amarillo':
  44.     case 'amarillo':
  45.     case 'AMARILLO':
  46.             Descuento= (Monto * 0.25);
  47.             printf("El Descuento por la Compra es: %f\n",Descuento);
  48.             break;          
  49.     case 'Azul':
  50.     case 'azul':
  51.     case '4':
  52.             Descuento= (Monto * 0.50);
  53.             printf("El Descuento por la Compra es: %f\n",Descuento);
  54.             break;            
  55.     case 'Rojo':
  56.     case 'rojo':
  57.     case 'ROJO':
  58.             (Descuento= Monto);
  59.             printf("El Descuento por la Compra es: %f\n",Descuento);
  60.             break;            
  61.   }
  62.  
  63.   TotalPagar= Monto - Descuento;
  64.  
  65.   printf("El Monto A pagar Total Por la Compra Es= %f\n",TotalPagar);
  66.    
  67.   system("PAUSE"); 
  68.   return 0;
  69. }

Bueno, ya analizando el código, dio errores de compilación.

Por lo tanto estuve investigando y acomodando el código de acuerdo a que pudiera ejecutar bien el programa, pero me percate de que al introducir el color, este no hace nada, sino que finaliza el programa.

Observen:



Acomodando el case y colocando un solo carácter, en vez de "blanco" colocas la inicial que es "b", este se ejecuta con normalidad.

Captura:



Disculpen tanto las vueltas, pero es para ir explicando lo que estuve haciendo mas o menos para llegar a la conclusión de que el case solo permite un carácter, si colocas 2, no se ejecuta.

Ahora la duda es. ¿Únicamente es posible en los case colocar variables de un solo carácter o este permite ejecutar mas caracteres? De ser así, que estructura o sentencia debo utilizar para que los case se ejecuten con mas de un carácter?.

Aquí está el código que utilicé para que lograra funcionar el programa:

Código C++:
Ver original
  1. #include <stdio.h> //  Archivo de la biblioteca estándar de Entrada/Salida.
  2. #include <math.h> // archivo estandar de la biblioteca de matematicas
  3. #include <stdlib.h> // Aritméticas, Números aleatorios; y • Conversión de cadenas.
  4. int main(int argc, char *argv[])
  5. {
  6.   char mensaje;
  7.   float Monto, Descuento, TotalPagar;
  8.   const int Azul= Azul;
  9.   printf("Dime el Monto de la Compra:");
  10.   scanf("%f",&Monto);  
  11.   printf("=============================================================\n");
  12.   printf("Dime El Color que Recibiste:");
  13.   scanf("%s",&mensaje);
  14.   printf("=============================================================\n");
  15.   switch (mensaje)
  16.   {  
  17.     case 'b':
  18.             TotalPagar = Monto;    
  19.             printf("Lo sentimos, no obtuvo ningun descuento\n");
  20.             printf("El monto total a pagar es:%f\n",TotalPagar);
  21.             break;          
  22.   }
  23.   system("pause"); 
  24.   return 0;
  25. }

PD: Utilicé la secuencia enum y tampoco funcionó, no tengo conocimiento si esa función se usa en C++ o lo declaré mal.

Bueno, eso es todo y en verdad lamento mucho la molestia de acuerdo a tantas vueltas, espero que me puedan ayudar .

Saludos.

Última edición por DarkScripter; 15/04/2015 a las 23:16 Razón: Falta de información