Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/07/2014, 22:23
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Error usando Switch y Case

Es normal.
Observe la linea: if ( n == 1 ) {
n nunca le has asignado un valor.
Es mas...eso es una mala practica. Crear una variable e no darle un valor inicial aun que sea un 0 para tener control. Estas comparando el residuo de la memoria que hay en la variable n con 1, y a menos que algún programa buen samaritano te haya dejado un uno antes nunca vas a tener un 1 ahí.

Sin embargo si haces:
n=1;
if ( n == 1 ) {
//blablabla
}
...eso ya es otra cosa.

Observe linea a linea e intente prever que es lo que pasa.

Ademas ese problema es fácil de saber pero otros vas a tener que aprender a usar el debuguer si o si.
Dale un valor a ese n o quita lo de ahí.

Otra cosa que veo, el break debería estar fuera de if no dentro. Lo correcto seria:
Código C:
Ver original
  1. #include <stdio.h>
  2. int main ( void ) {
  3.     int n, opcion;
  4.     printf ( "\tCasa rural\n" );
  5.     printf ( "\n" );
  6.     printf ( "Habitaciones\n" );
  7.     printf ( "n1. Azul\n" );
  8.     printf ( "n2. Roja\n" );
  9.     printf ( "n3. Verde\n" );
  10.     printf ( "n4. Rosa\n" );
  11.     printf ( "n5. Gris\n" );
  12.     printf ( "Ingresa el numero de la habitacion: " );
  13.     scanf ( "%d", &opcion );
  14.    
  15.     //Eso lo hago para dar un valor a n...lo puedes quitar después si quieres o cambia por 2,3,4....
  16.     n = 1;   //solo puedes elegir 1 en el menú sino te va fallar las otras opciones n==2.... n==4... porque n vale uno n==1
  17.    
  18.    
  19.    
  20.     printf ( "\n" );
  21.    
  22.     switch ( opcion ) {
  23.         case 1:
  24.             if ( n == 1 ) {
  25.                 printf ( "Habitacion 1: Tiene 2 camas y se encuentra en la primera planta\n" );
  26.             }
  27.            
  28.             break;
  29.            
  30.         case 2:
  31.             if ( n == 2 ) {
  32.                 printf ( "Habitacion 2: Tiene 1 cama y se encuentra en la primera planta\n" );
  33.             }
  34.            
  35.             break;
  36.            
  37.         case 3:
  38.             if ( n == 3 ) {
  39.                 printf ( "Habitacion 3: Tiene 3 camas y se encuentra en la segunda planta\n" );
  40.             }
  41.            
  42.             break;
  43.            
  44.         case 4:
  45.             if ( n == 4 ) {
  46.                 printf ( "Habitacion 4: Tiene 2 camas y se encuentra en la segunda planta\n" );
  47.             }
  48.            
  49.             break;
  50.            
  51.         case 5:
  52.             if ( n == 5 ) {
  53.                 printf ( "Habitacion 5: Tiene 1 cama y se encuentra en la tercera planta\n" );
  54.             }
  55.            
  56.             break;
  57.            
  58.         default:
  59.             printf ( "Error ingresa de nuevo" );
  60.             break;
  61.     }
  62.    
  63.    
  64.    
  65.    
  66.     return 0;
  67. }

Observe los break fuera de las sentencias if.

Un truco que puedes usar es poner printf("Dentro de case1"); dentro de case 1 =D para saber si has entrado en ese caso. printf te sirve para dar una depurada chapucera pero efectiva y ver que camino ha tomado tu programa. Si has entrado a un if pon printf("dentro de if"); ....

Código C:
Ver original
  1. switch ( opcion ) {
  2.         case 1:
  3.             printf("Dentro de case1");
  4.             if ( n == 1 ) {
  5.                 printf("Dentro de if.\nn vale 1\n");
  6.                 printf ( "Habitacion 1: Tiene 2 camas y se encuentra en la primera planta\n" );
  7.             }
  8.             printf("No hemos entrado a if porque n no es igual que 1.\n");
  9.             break;
  10.         case 2:
  11.             ...
Una vez que vea que el programa va como tu quieres les puedes quitar esas lineas o simplemente comentarlas con un //
Default también lleva el break;

Última edición por vangodp; 16/07/2014 a las 22:44