switch…case en C (Declaración de cambio en C) con ejemplos

⚡ Resumen inteligente

La instrucción switch en C compara una expresión con múltiples etiquetas case y ejecuta el bloque coincidente, ofreciendo una alternativa más limpia a las largas cadenas if-else cuando un programa debe elegir entre muchos valores enteros o de caracteres fijos.

  • 🔀 Ramificación múltiple: Una instrucción switch prueba una expresión y salta a la etiqueta de caso correspondiente.
  • 🏷️ Etiquetas de la caja: Cada caso utiliza una constante entera única o una etiqueta de carácter que termina en dos puntos.
  • Palabra clave de ruptura: La instrucción break finaliza un caso; sin ella, la ejecución se interrumpe.
  • 🧩 Caso predeterminado: El bloque predeterminado opcional se ejecuta cuando ninguna etiqueta de caso coincide con la expresión.
  • 📋 Reglas del interruptor: Las etiquetas de los casos permanecen constantes y únicas, permitiéndose solo una etiqueta predeterminada.

Sentencia Switch en C

¿Qué es la declaración de cambio en C?

La instrucción switch en C evalúa el valor de una variable y lo compara con varios casos. Una vez que se encuentra una coincidencia, se ejecuta un bloque de instrucciones asociado a ese caso en particular.

Cada caso en un bloque de un interruptor tiene un nombre/número diferente al que se hace referencia como identificador. El valor proporcionado por el usuario se compara con todos los casos dentro del bloque de interruptor hasta que se encuentra la coincidencia.

Si NO se encuentra una coincidencia de caso, entonces se ejecuta la instrucción predeterminada y el control sale del bloque de conmutación.

Sintaxis de caso de cambio

Una sintaxis general de cómo se implementa switch-case en un programa 'C' es la siguiente:

switch( expression )
{
	case value-1:
			Block-1;
			Break;
	case value-2:
			Block-2;
			Break;
	case value-n:
			Block-n;
			Break;
	default:
			Block-1;
			Break;
}
Statement-x;
  • La expresión puede ser una expresión entera o una expresión de caracteres.
  • Valor-1, 2, n son etiquetas de casos que se utilizan para identificar cada caso individualmente. Recuerde que las etiquetas de los casos no deben ser las mismas, ya que puede crear un problema al ejecutar un programa. Supongamos que tenemos dos casos con la misma etiqueta que "1". Luego, mientras se ejecuta el programa, se ejecutará el caso que aparece primero aunque desee que el programa ejecute un segundo caso. Esto crea problemas en el programa y no proporciona el resultado deseado.
  • Las etiquetas de casos siempre terminan con dos puntos ( : ). Cada uno de estos casos está asociado a un bloque.
  • Un bloque no es más que múltiples declaraciones que se agrupan para un caso particular.
  • Cada vez que se ejecuta el cambio, el valor de la expresión de prueba se compara con todos los casos que hemos definido dentro del cambio. Supongamos que la expresión de prueba contiene el valor 4. Este valor se compara con todos los casos hasta el caso cuya etiqueta cuatro se encuentra en el programa. Tan pronto como se encuentra un caso, el bloque de declaraciones asociadas con ese caso en particular se ejecuta y el control sale del interruptor.
  • La palabra clave break en cada caso indica el final de un caso particular. Si no ponemos la interrupción en cada caso, aunque se ejecute el caso específico, el cambio en C continuará ejecutando todos los casos hasta llegar al final. Esto no debería suceder; por lo tanto, siempre tenemos que poner la palabra clave break en cada caso. Break terminará el caso una vez que se ejecute y el control se caerá del interruptor.
  • El caso predeterminado es opcional. Siempre que el valor de test-expression no coincida con ninguno de los casos dentro del conmutador, se ejecutará el valor predeterminado. De lo contrario, no es necesario escribir el valor predeterminado en el conmutador.
  • Una vez que se ejecuta el cambio, el control irá a la instrucción-x y la ejecución de un programa continuará.

Diagrama de flujo de declaración de cambio

El siguiente diagrama ilustra cómo se selecciona un caso en el caso del interruptor:

Diagrama de flujo de declaración de cambio

Cómo funciona el interruptor

Ejemplo de caso de cambio en C

El siguiente programa ilustra el uso del conmutador:

#include <stdio.h>
    int main() {
        int num = 8;
        switch (num) {
            case 7:
                printf("Value is 7");
                break;
            case 8:
                printf("Value is 8");
                break;
            case 9:
                printf("Value is 9");
                break;
            default:
                printf("Out of range");
                break;
        }
        return 0;
    }

Salida:

Value is 8

Ejemplo de caso de cambio en C

  1. En el programa dado hemos inicializado un variable número con valor 8.
  2. Se utiliza una construcción de cambio para comparar el valor almacenado en la variable num y ejecutar el bloque de declaraciones asociadas con el caso coincidente.
  3. En este programa, dado que el valor almacenado en la variable num es ocho, un interruptor ejecutará el caso cuya etiqueta de caso sea 8. Después de ejecutar el caso, el control se caerá del interruptor y el programa finalizará con el resultado exitoso. imprimiendo el valor en la pantalla de salida.

Intente cambiar el valor de la variable num y observe el cambio en la salida.

Por ejemplo, consideremos el siguiente programa cuyo valor predeterminado es:

#include <stdio.h>
int main() {
int language = 10;
  switch (language) {
  case 1:
    printf("C#\n");
    break;
  case 2:
    printf("C\n");
    break;
  case 3:
    printf("C++\n");
    break;
  default:
    printf("Other programming language\n");}}

Salida:

Other programming language

Cuando trabaja con un caso de cambio en C, agrupa varios casos con etiquetas únicas. Debe introducir una declaración de interrupción en cada caso para bifurcarse al final de una declaración de cambio.

El caso predeterminado opcional se ejecuta cuando no se realizan otras coincidencias.

Consideremos la siguiente declaración switch:

#include <stdio.h>
int main() {
int number=5;
switch (number) {
  case 1:
  case 2:
  case 3:
    printf("One, Two, or Three.\n");
    break;
  case 4:
  case 5:
  case 6:
    printf("Four, Five, or Six.\n");
    break;
  default:
    printf("Greater than Six.\n");}}

Salida:

Four, Five, or Six.

Interruptor anidado en C

In C, podemos tener un interruptor interno integrado en un interruptor externo. Además, las constantes de caso del interruptor interno y externo pueden tener valores comunes y sin ningún conflicto.

Consideremos el siguiente programa, que solicita al usuario que ingrese su ID. Si el ID es válido, le pedirá que ingrese su contraseña; si la contraseña es correcta, el programa imprimirá el nombre del usuario; de lo contrario, imprimirá "Contraseña incorrecta"; y si el ID no existe, el programa imprimirá "ID incorrecto".

#include <stdio.h>
int main() {
        int ID = 500;
        int password = 000;
        printf("Plese Enter Your ID:\n ");
        scanf("%d", & ID);
        switch (ID) {
            case 500:
                printf("Enter your password:\n ");
                scanf("%d", & password);
                switch (password) {
                    case 000:
                        printf("Welcome Dear Programmer\n");
                        break;
                    default:
                        printf("incorrect password");
                        break;
                }
                break;
            default:
                printf("incorrect ID");
                break;
        }
}

Salida:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

Interruptor anidado en C

  1. En el programa dado, hemos inicializado dos variables: ID y contraseña.
  2. Se utiliza una estructura switch externa para comparar el valor introducido en la variable ID. Esta ejecuta el bloque de instrucciones asociado al caso coincidente (cuando ID==500).
  3. Si la instrucción de bloque se ejecuta con el caso coincidente, se utiliza un switch interno para comparar los valores introducidos en la variable password y ejecutar las instrucciones vinculadas con el caso coincidente (cuando password==000).
  4. De lo contrario, el caso de conmutación activará el caso predeterminado e imprimirá el texto apropiado respecto del esquema del programa.

¿Por qué necesitamos un estuche Switch?

Hay un problema potencial con el declaración if-else La complejidad del programa aumenta cuando aumenta el número de rutas alternativas. Si se utilizan múltiples construcciones if-else en el programa, este puede volverse difícil de leer y comprender. A veces, incluso puede confundir al desarrollador que escribió el programa.

La solución a este problema es la declaración de cambio.

Reglas para la declaración de cambio

Sigue estas reglas al escribir una estructura switch en C:

  • Una expresión siempre debe ejecutarse para obtener un resultado.
  • Las etiquetas de casos deben ser constantes y únicas.
  • Las etiquetas de los casos deben terminar con dos puntos ( : ).
  • En cada caso debe estar presente una palabra clave de interrupción.
  • Sólo puede haber una etiqueta predeterminada.
  • Podemos anidar múltiples declaraciones de cambio.

Preguntas Frecuentes

El interruptor de CA solo acepta valores de tipo int, char y enum; nunca valores de punto flotante ni cadenas de texto, ya que cada etiqueta debe ser un número entero constante.

Sin interrupción, el control se interrumpe y se ejecuta también en todos los casos posteriores; a veces es intencional, pero generalmente se trata de un error accidental.

No. C no admite cadenas de texto; las etiquetas deben ser números enteros constantes. En su lugar, compare el texto con strcmp dentro de una estructura if-else.

El estándar C prohíbe los rangos, aunque GCC permite una extensión de caso no portable 1 … 5: que el código portable debería evitar.

No. El caso predeterminado puede ubicarse en cualquier lugar; se ejecuta solo cuando no hay ninguna etiqueta que coincida. La última ubicación es mera convención.

Sí, pero envuelve el cuerpo del caso entre llaves; de lo contrario, una declaración después de una etiqueta puede provocar errores de compilación.

Sí. Los asistentes de codificación de IA diseñan bloques switch, añaden cada break y señalan los fallos accidentales. Siempre revise la lógica generada.

Copiloto de GitHub Completa automáticamente las etiquetas de los casos, inserta sentencias break y convierte largas cadenas if-else en una estructura switch a partir de un comentario.

Resumir este post con: