• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Problema case en lenguaje c

zaphiel

Chapuzas Junior
Registrado
30 Ene 2014
Mensajes
951
Puntos
0
Buenas chapuzillas.

Esto es una duda sobre el lenguaje de programacion c (se podrían hacer más apartados para problemas asi??)

Estoy haciendo un programa que simule un casino.
Intengo hacer un case en el que el usuario elija 1 juego pero no se como evitar la ejecución de los case de abajo sin usar break(el profesor no deja).

Alguna idea?

Este es el codigo:

Código:
//juego de casino, practica 2
#include <math.h> //funciones matematicas simples
#include <stdio.h> //capacidades de entrada/salida
#include <stdlib.h> //conversión de tipos, generación de números pseudo-aleatorios, gestión de memoria dinámica, control de procesos, funciones de entorno...
#include <string.h> //manipulacion de cadenas de caracteres

//funcion generar numero aleatorio
int AleatorioRuleta()
{
	srand(time(NULL)); //se limpia la semilla de argumentos para evitar volver a generar el mismo numero
	return rand()%37; //esto da un numero entre 0 y 36, el 37 nunca sale
	// printf ("%d", AleatorioRuleta());   para hacer la llamada
} 


int main(void)
{
	//iniciamos variables
	char nombre[30],apellidos[50],eleccion[20];
	float saldo;
	int ElegirJuego;
	
	//pedimos datos del usuario
	printf("Como te llamas?: "); scanf("%s",nombre); printf("Cual es tu apellido?: "); scanf("%s",apellidos);
	printf("De que saldo dispones?: ");	scanf("%f",&saldo);
	printf("\n\nLE DOY LA BIENVENIDA AL GRAN CASINO %s %s !.", nombre, apellidos); printf("\nSu saldo actual es de: %.3f\n\n", saldo); //%.3f para mostrar 3 decimales
	
	if (saldo < 1) //comprobamos saldo inicial para ver si puede jugar
	{
		printf ("\nLo sentimos, tu saldo es menor a 1, con %f no puedes jugar. ", saldo);
	}else{
		printf("\nCuentas con un saldo de %f ", saldo);
		//case para elegir juego
		printf("\n\t##########################");
		printf("\n\t# A que quiere jugar?:   #");	
		printf("\n\t# Ruleta (Escriba 1)     #");
		printf("\n\t# Blackjack (Escriba 2)  #");
		printf("\n\t# Salir (Escriba 0)      # ");
		printf("\n\t##########################\n\t");
		scanf("%d",&ElegirJuego);

		switch(ElegirJuego){
			case 1:
					printf("\nHa elegido Ruleta.");
                                        //aqui va todo el codigo de la ruleta
			case 2:	
					printf("\nHa elegido Blackjack.");
                                        //aqui va todo el codigo del blackjack
			default:
					printf("\nEspero que vuelva pronto!.");
			
		}
		
	}
	
	getch();
	return 0;
}

Un saludo
 
No te lo tomes a mal zaphiel, pero si te lo digo te estaría haciendo los deberes. Tu profesor os ha prohibido usar el break precisamente para que busques una solución alternativa.
Créeme, flaco favor te estaríamos haciendo si te dijésemos la solución :)
 
Que profesor mas cabron tienes!ajajaja a mi en java era en el unico sitio que me dejaban usarlo xD
 
No te preocupes Annubis, la cosa es que he buscado pero no he encontrado nada útil, me quiere sonar algo de switch trace pero solo encuentro cosas de redes. No quiero que me digáis todo pero si es posible que me guieis en cómo hacerlo. Recuerdo que en shell script lo hice sin break, pero en c no me acuerdo.

Gracias.



Enviado desde mi OnePlus One vía Tapatalk 4
 
A ver si usas un switch-case tienes que usar el break. En caso contrario tirar de if-else.
 
Sí lo se, pero también es posible hacerlo sin usar break quiero recordar, si no lo haré con if else que es como lo tenia ya.

Enviado desde mi OnePlus One vía Tapatalk 4
 
A ver... ¿El profesor te exige que sea un case si o si? Si no te lo exige puedes hacerlo de muchas formas... If... While...

Trocotroleado con mi Movilote
 
Usa el goto, es de lo mejor que se inventó para la programación:

goto label;
..
.
label: statement;

:borracho:
 
Dime que es broma, por favor....

Trocotroleado con mi Movilote
 
jajajaja, ya sabía que alguien se tiraría de los pelos al leer eso. :pancarta:
 
Cabrón. No juegues así conmigo que casi me da un infarto

Trocotroleado con mi Movilote
 
Yo aún no sé como lo añadieron en el php 5.3 :madrededios:

Recuerdo cuando copiaba, con 8 años, programas del microhobby: numerar las líneas de 5 en 5 o de 10 en 10, para poder luego meter más líneas entre medias y los goto y gosub. Seguir el flujo de un programa era para morirse.

Bueno, yo en esa época me dedicaba a jugar al Manic Miner, pero ya me hacía tilín la programación ...
 
No me exige tener case, solo que yo quería mirar si se podía hacer para tener el código más ordenado.

Voy a dejarlo como lo tenia al principio con White y if... else

Enviado desde mi OnePlus One vía Tapatalk 4
 
Hombre... es que usar un "case" sin "break" es lo más absurdo del mundo... a menos que cada caso incluya al siguiente.

La mejor alternativa, también ordenada, es:

if( "case 1")
{}
else if ("case 2")
{}

y así sucesivamente...
 
Eso había pensado también, lo probaré y veré como queda.

Enviado desde mi OnePlus One vía Tapatalk 4
 
Ya te lo ha chivado Iván. Lo que quiere tu profesor es que montes tú mismo el case. A mí me pusieron la misma práctica cuando estaba aprendiendo ANSI C

Trocotroleado con mi Movilote
 
Coño ¿como nadie ha propuesto el uso de semaforos?

http://es.wikipedia.org/wiki/Semáforo_(informática)

Busca info sobre los mutex, no recuerdo bien si estaban en C o eran llamadas al sistema unix

Pero para el caso es algo muy complejo, aqui no requieres de concurrencia xD solo necesitas que no salte a las otras sentencias

Bueno aver, no te dejan usar break, pero no han dicho nada del continue no? jajaja pues simplemente inviertes tus condiciones

Si el break rompe un bucle, el continue salta a la siguiente iteracion, no se si me explico.
 
Pues no lo había pensado, lo probaré para ver como funciona.

Enviado desde mi OnePlus One vía Tapatalk 4
 
Me encontraba ocioso y sigo empeñado en los semáforos xD así que aqui tienes una
Código:
//juego de casino, practica 2
#include <math.h> //funciones matematicas simples
#include <stdio.h> //capacidades de entrada/salida
#include <stdlib.h> //conversión de tipos, generación de números pseudo-aleatorios, gestión de memoria dinámica, control de procesos, funciones de entorno...
#include <string.h> //manipulacion de cadenas de caracteres
#include <stdbool.h> // compiladores C99 tienen implementado bool
//funcion generar numero aleatorio
int AleatorioRuleta()
{
	srand(time(NULL)); //se limpia la semilla de argumentos para evitar volver a generar el mismo numero
	return rand()%37; //esto da un numero entre 0 y 36, el 37 nunca sale
	// printf ("%d", AleatorioRuleta());   para hacer la llamada
} 


int main(void){
	bool lock = false; // Variable de cierre
	//iniciamos variables
	char nombre[30],apellidos[50],eleccion[20];
	float saldo;
	int ElegirJuego;
	
	//pedimos datos del usuario
	printf("Como te llamas?: "); scanf("%s",nombre); printf("Cual es tu apellido?: "); scanf("%s",apellidos);
	printf("De que saldo dispones?: ");	scanf("%f",&saldo);
	printf("\n\nLE DOY LA BIENVENIDA AL GRAN CASINO %s %s !.", nombre, apellidos); printf("\nSu saldo actual es de: %.3f\n\n", saldo); //%.3f para mostrar 3 decimales
	
	if (saldo < 1) //comprobamos saldo inicial para ver si puede jugar
	{
		printf ("\nLo sentimos, tu saldo es menor a 1, con %f no puedes jugar. ", saldo);
	}else{
		printf("\nCuentas con un saldo de %f ", saldo);
		//case para elegir juego
		printf("\n\t##########################");
		printf("\n\t# A que quiere jugar?:   #");	
		printf("\n\t# Ruleta (Escriba 1)     #");
		printf("\n\t# Blackjack (Escriba 2)  #");
		printf("\n\t# Salir (Escriba 0)      # ");
		printf("\n\t##########################\n\t");
		scanf("%d",&ElegirJuego);
		
		
		switch(ElegirJuego){
			case 1:		
				if(!lock){
					printf("\nHa elegido Ruleta.");
				}
				lock = true;
					
				
			case 2:	
				if(!lock){
					printf("\nHa elegido Blackjack.");
				}
				lock = true;
					
			default:
				if(!lock){
					printf("\nEspero que vuelva pronto!.");
				}
				lock = true;
					
			
		}
		
	}
	
	getch();
	return 0;
}
 
Arriba