La sentencia switch(), como bien dices, es una manera de simplificar un tipo concreto de if(). Un switch() sirve para evaluar una expresión de tipo int o char y dependiendo del valor hacer una cosa u otra.
Código utilizando if():
int mes;
printf("Introduce un numero del 1 al 12: "); if(mes
== 1) printf("Enero\n"); else if(mes
== 2) printf("Febrero\n"); else if(mes
== 3) printf("Marzo\n"); ...
else printf("No has introducido un numero entre 1 y 12\n");
Mismo código utilizando switch():
int mes;
printf("Introduce un numero del 1 al 12: "); switch(mes) { // Segun el valor de <mes>...
case 1: // ...si es 1...
printf("Enero\n"); // ...haces esto... break; // ...y sales del switch
case 2: // ...si es 2...
printf("Febrero\n"); // ...haces esto... break; // ...y sales del switch
...
default: // ...si no era ninguno de los anteriores...
printf("No has introducido un numero entre 1 y 12\n"); break; // (este break es opcional porque no hay mas casos)
}
El switch permite hacer
comparaciones de igualdad teniendo que escribir menos en la condición. El break es necesario para salir del switch y no ejecutar todos. Si no se pusiera el break, el programa entraría en el primer case que cumpla la condición y ejecutaría el código de todos hasta encontrar un break o hasta terminar. Esto también se puede aprovechar para algo como esto:
char letra = ...;
switch(letra) {
case 'a': case 'e': case 'i': case 'o': case 'u':
printf("La letra %c es una vocal minuscula\n", letra
); break;
case 'A': case 'E': case 'I': case 'O': case 'U':
printf("La letra %c es una vocal mayuscula\n", letra
); break;
default:
printf("La letra %c es una consonante\n", letra
); }
* La claúsula <default> es opcional y siempre debe ir al final porque sino cualquier case que vaya después que <default> no se va a ejecutar nunca (a no ser que no haya breaks).