Anuncios

Bienvenidos sean a este post, hoy veremos otro tipo de condicional.

Anuncios

En el post anterior vimos el condicional universal por excelencia, hoy nos centraremos en una «evolucion» de este, si bien no reemplaza al if si lo complementa para algunas tareas, antes de ahondar en detalles veamos como es su sintaxis:

switch(variable)
{
	case valor1:
		... insttrucciones ...
		break;
	case valor2:
		... insttrucciones ...
		break;
	...
	case valorN:
		... insttrucciones ...
		break;
	default:
		... insttrucciones ...
		break;
}
Anuncios
Anuncios

En este caso no nos manejaremos con condiciones sino que evaluaremos los distintos valores que pueda tener una variable, en este caso al switch le pasaremos la variable a evaluar, luego en el bloque usaremos a case donde esta relacionado a un valor, si la variable posee ese valor ejecutara todas las instrucciones del case hasta el break y saldra del switch, podemos tener todos los case que necesitemos, cada uno con sus respectivos instrucciones, por ultimo tenemos el default que es similar al else, dado que se ejecutara solamente si no coincidio con ninguna de las evaluaciones anteriores, se usa uno solo y va al final, aunque al igual que else es completamente opcional, con todo esto comentado vamos a hacer un ejemplo, para ello vamos a convertir el codigo del ejemplo anterior de if a swtich, pero para ello primero crearemos un nuevo archivo que llamaremos switch.c y le agregaremos el siguiente codigo:

switch.c

#include <stdio.h>

int main()
{
	char opcion[1];

	printf("Deseas continuar? (S/N): ");
	scanf("%s", opcion);

	switch(*opcion)
	{
		case 's':
			printf("Que bueno!\n");
			break;
		case 'S':
			printf("Que bueno!\n");
			break;
		case 'n':
			printf("Que mal!\n");
			break;
		case 'N':
			printf("Que mal!\n");
			break;
		default:
			printf("Debes elegir entre S o N\n");
			break;
	}

	return 0;
}
Anuncios

Es muy similar a lo visto en el post anterior donde primero declararemos una variable de tipo char, el valor entre corchetes es el tamaño del mismo, es decir la cantidad de carateres que aceptara, despues mostramos un mensaje de que debemos ingresar y por medio de scanf daremos la posibilidad de poder ingresar un valor, este valor lo almacenaremos en la variable que declaramos primero, con nuestro valor almacenado pasaremos al switch.

Anuncios

Si se preguntan por el asterisco, es el operador de apuntadores pero de esto ahondaremos mucho mas adelante, resumiendolo muy brevemente este operador nos apunta a la direccion de memoria donde esta almacenado el valor, observen que tenemos varios case, en este caso por cada uno de los tipos de letras que podemos ingresar, ya sea mayuscula o minuscula, y mostrara el mensaje que corresponde, por ultimo el default servira para mostrar cuando no coincida con ninguno de los case anteriores informando que valores debemos ingresar, vamos a compilarlo y probarlo para ver como funciona

Anuncios

Como pueden ver trabaja de la misma forma pero de una forma un poco mas simple, la ventaja principal es que una vez coincidio con el valor procede a liberar la memoria porque no continua con el switch si esto fuera con if, ejecutaria cada condicion para verificar que no tenga que hacer otra cosa, pero a su vez podemos mejorar este codigo con una libertad de esta funcion, tomemos el archivo y modifiquemoslo de la siguiente manera:

switch.c

#include <stdio.h>

int main()
{
	char opcion[1];

	printf("Deseas continuar? (S/N): ");
	scanf("%s", opcion);

	switch(*opcion)
	{
		case 's':
		case 'S':
			printf("Que bueno!\n");
			break;
		case 'n':
		case 'N':
			printf("Que mal!\n");
			break;
		default:
			printf("Debes elegir entre S o N\n");
			break;
	}

	return 0;
}
Anuncios
Anuncios

Lo que hicimos basicamente fue eliminar el codigo repetido, es decir que para este caso eliminamos el contenido de las minusculas y el break, esto hara que si lo encuentra continue al siguiente case, donde lo ejecutara, esta es una conducta particular de la funcion, si tenemos varios valores que ejecutaran las mismas instrucciones, podemos poner los case con los valores sin las instrucciones y el break, para el ultimo caso si pasar las instruccciones relacionadas a estos, si lo vuelven a compilar y probar deberia funcionar exactamente igual.

Anuncios

Los case no solo aceptan valores literales sino que tambien permiten valores de constantes y operaciones matematicas, asi como algunas operaciones de texto, un ejemplo de case con operaciones seria semejante a este:

switch(valor)
{
	case (otro_valor/2):
		printf("Es la mitad del valor\n");
		break;
	case (otro_valor-32):
		printf("A valor le restamos 32");
		break;
}
Anuncios

Siempre que lo informado en el case represente un valor constante no deberia haber problemas, y como dijimos al comienzo esta funcion no reemplaza a if sino que podemos usarlo dentro de los case o dentro de un if podemos usar a switch, ideal para complementarse.

Anuncios

En resumen, hoy hemos visto a switch, que es, para que se usa, como se compone, que comparte y difiere con respecto a if, tambien hemos tomado el ejemplo del post anterior para transformalo a switch, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario