Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Error usando Switch y Case

Estas en el tema de Error usando Switch y Case en el foro de C/C++ en Foros del Web. Al hacer este programa usando switch y case, no me deja compilarlo me aparece [Error] case label not within a switch statement y [Error] break ...
  #1 (permalink)  
Antiguo 16/07/2014, 15:47
 
Fecha de Ingreso: diciembre-2012
Ubicación: Jardim Alegre
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Error usando Switch y Case

Al hacer este programa usando switch y case, no me deja compilarlo me aparece [Error] case label not within a switch statement y [Error] break statement not within loop or switch, marca en cada case ese error, aqui mi codigo:

Código:
#include <stdio.h>
int main (void)
{
	int n,opcion;
	printf("\tCasa rural\n");
	printf("\n");
	printf("Habitaciones\n");
	printf("n1. Azul\n");
	printf("n2. Roja\n");
	printf("n3. Verde\n");
	printf("n4. Rosa\n");
	printf("n5. Gris\n");
	printf("Ingresa el numero de la habitacion: ");
	scanf("%d", &opcion);
	switch(opcion)
	printf("\n");
	
	{
	case 1:
	if (n==1){
		printf("Habitacion 1: Tiene 2 camas y se encuentra en la primera planta\n");
		break;
			}
	
	case 2:
	if (n==2){
		printf("Habitacion 2: Tiene 1 cama y se encuentra en la primera planta\n");
		break;
	}
	case 3:
	if (n==3){
		printf("Habitacion 3: Tiene 3 camas y se encuentra en la segunda planta\n");
		break;
	}
	case 4:
	if (n==4){
		printf("Habitacion 4: Tiene 2 camas y se encuentra en la segunda planta\n");
		break;
	}
	case 5:
	if (n==5){
		printf("Habitacion 5: Tiene 1 cama y se encuentra en la tercera planta\n");
		default:
			printf("Error ingresa de nuevo");
	}
	
		}
	return 0;
}
A ver si me ayudan, muchas gracias
  #2 (permalink)  
Antiguo 16/07/2014, 17:34
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Error usando Switch y Case

tienes un printf entre el switch() y la primera "{". No pueden haber instrucciones entremedio.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 16/07/2014, 17:46
 
Fecha de Ingreso: diciembre-2012
Ubicación: Jardim Alegre
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Error usando Switch y Case

gracias, si era eso pero ahora al ejecutarlo, ingresando el numero no me da ningun resultado.
  #4 (permalink)  
Antiguo 16/07/2014, 22:23
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 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
  #5 (permalink)  
Antiguo 17/07/2014, 02:24
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: Error usando Switch y Case

Hola

Una duda. ¿Qué objetivo tiene el if dentro del case y la variable n? La opción que pulsó el usuario ya la selecciona el switch con la variable opcion.

Saludos
  #6 (permalink)  
Antiguo 17/07/2014, 04:40
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 11 meses
Puntos: 49
Respuesta: Error usando Switch y Case

Cita:
Iniciado por jc_moj Ver Mensaje
Hola

Una duda. ¿Qué objetivo tiene el if dentro del case y la variable n? La opción que pulsó el usuario ya la selecciona el switch con la variable opcion.

Saludos
Efectivamente todos esos if y el uso de la variable n, tal como está el código, están de más.

Saludos!.
  #7 (permalink)  
Antiguo 17/07/2014, 18:20
 
Fecha de Ingreso: diciembre-2012
Ubicación: Jardim Alegre
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Error usando Switch y Case

muchas gracias ya quedo, la verdad es que se me paso eso de que cambie n por opcion, ya le puse n ya que practicamente opcion esta demas, sin embargo no entiendo la parte que dices de poner printf("Dentro de case1") es necesaria? y el break probe poniendolos fuera y dentro de if y me da el mismo resultado. gracias perdon por saber tan poco :(
  #8 (permalink)  
Antiguo 18/07/2014, 00:02
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Error usando Switch y Case

No son necesarios! Es que por ejemplo si se imprime el mensaje "Dentro de case1" sabes que has entrado en dicho case. pero si no se imprimiera "Dentro de if...." es que no has entrado en tal if lo que dicho de otro modo tu programa haría "nada".
  #9 (permalink)  
Antiguo 18/07/2014, 02:48
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: Error usando Switch y Case

Hola

Me parece que te has liado un poco con el switch.

Cuando se ejecuta el programa, se ejecuta el case adecuado según la variable opción, lo que hace el break es detener la ejecución dentro del case y saltar fuera del switch, es decir, si no lo pones, seguiría ejecutándose el código del siguiente case. Por eso, si lo pones dentro del if, el break solo se ejecuta si entra en el if, por lo que debes sacarlo fuera para que se ejecute siempre.

Tal y como creo que debería funcionar el programa, no necesitas los if dentro del case, el case ya se encarga de seleccionar la opción adecuada según la opción que escogió el usuario.

Saludos
  #10 (permalink)  
Antiguo 19/07/2014, 12:46
 
Fecha de Ingreso: diciembre-2012
Ubicación: Jardim Alegre
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Error usando Switch y Case

muchas gracias a todos, la verdad es que se muy poco, algun dia quisiera ser como ustedes.
  #11 (permalink)  
Antiguo 19/07/2014, 14:55
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Error usando Switch y Case

http://v1.minidosis.org/C++/ XD

Etiquetas: case, condicional, switch
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:54.