O comando switch case em C

Por: Eduardo Casavella
É uma forma de reduzir a complexidade de vários if … else encadeados.

É muito utilizado, principalmente para uso em estruturas de menu.

O conteúdo de uma variável é comparado com um valor constante, e caso a comparação seja verdadeira, um determinado comando é executado.
Pseudocódigo:

Em português estruturado o comando escolha…caso equivale ao switch…case

Veja estrutura escolha … caso

Escolha (Variável)
Inicio
   Caso (Valor1): 
      Instruções;
   
   Caso (Valor2): 
     Instruções;
   
   Caso (ValorN): 
     Instruções;
Fim;

Sintaxe do comando switch case em linguagem C

switch (variável)
{
   case constante1:
     Instruções;
   break;

   case constante2:
     Instruções;
   break;

   default
     Instruções;
}

Utilização

Vamos construir um programa para verificar o dia da semana a fim de exemplificar a utilização do switch…case.

O usuário vai digitar um número e o programa vai retornar o dia da semana equivalente ao número.

Exemplo:

 

#include <stdio.h>
#include <conio.h>
int main (void )
{
	int valor;
	
	printf ("Digite um valor de 1 a 7: ");
	scanf("%d", &valor);
	
	switch ( valor )
	{
		case 1 :
		printf ("Domingo\n");
		break;
		
		case 2 :
		printf ("Segunda\n");
		break;
		
		case 3 :
		printf ("Terça\n");
		break;
		
		case 4 :
		printf ("Quarta\n");
		break;
		
		case 5 :
		printf ("Quinta\n");
		break;
		
		case 6 :
		printf ("Sexta\n");
		break;
		
		case 7 :
		printf ("Sabado\n");
		break;
		
		default :
		printf ("Valor invalido!\n");
	}
	
	getch();
	return 0;
}

 

Tela de execução

Tela execução comando Switch

Tela de execução do comando Switch Case C

 

Explicação do código:

A instrução break termina a execução do switch e o programa continua a executar na instrução seguinte.

O uso do break evita testar as demais alternativas de forma desnecessária quando uma opção verdadeira já foi encontrada.

O comando default exibe uma mensagem, caso nenhuma das alternativas anteriores seja verdadeira.
Agora veja, como ficaria o mesmo programa usando comandos if else aninhados (encadeados).

#include <stdio.h>
#include <conio.h>
int main (void )
{
	int valor;
	
	printf ("Digite um valor de 1 a 7: ");
	scanf("%d", &valor);
	
	if (valor == 1)
		printf ("Domingo\n");
	else
	if (valor == 2)
		printf ("Segunda\n");
	else
	if (valor == 3)
		printf ("Terça\n");
	else
	if (valor == 4)
	printf ("Quarta\n");
	else
	if (valor == 5)
		printf ("Quinta\n");
	else
	if (valor == 6)
		printf ("Sexta\n");
	else
	if (valor == 7)
		printf ("Sabado\n");
	else
		printf ("Valor invalido!\n");
	
	getch();
	return 0;
}

 

Importante:

Não são aceitas expressões condicionais no comando switch…case, somente são aceitos valores constantes.

Esta é um diferença bem grande quando comparado ao comando if…else.

Portanto caso tenha que testar uma condição você terá que usar if…else ao invés do switch…case.
Até a próxima!

19 respostas a O comando switch case em C

  • Santos Domingo António disse:

    valeu muit sobre esse post e m ajudou mui a enteder a diferença entre switch case e if…else, so mais uma coisa trabalhar no c++ com aplicaçao ao invens d cmd

  • patrick antonio major miguel disse:

    valeu gostei muito deste exercicio

  • Alcantara Riviera disse:

    gostei muito da aula…………..

  • Torricelli Evangelista disse:

    Parabéns pela extrema facilidade em passar seu conhecimento. Serviu demais essa explicação pra mim. Obrigado pela ajuda.

  • Tiago disse:

    Me salvou, muito obrigado pelo seu trabalho.

  • Eduardo disse:

    Legal mesmo, se a explicação for boa, não existe aluno que não entenda. obrigado

  • Victor Hugo disse:

    Parabéns pelo post muito bem escrito e muito didático. Obrigado, me ajudou bastante.

  • felipe disse:

    mt boooommm cara, serio, me ajudou pra caramba!!!

    switch( msg ){
    case like:
    printf(“mt bom veeei”);
    break;
    }

  • Lenildo disse:

    Esqueceram de dizer que a função SWITCH só aceita números inteiros (int) e não aceita números reais (float), apesar de aceitar caractere (char).

    • Ailson disse:

      Num post seu acima, você disse “apesar de de aceitar caractere (char)”. O tipo char nada mais é do que tipo byte, que por sua vez é um tipo inteiro de 8 bits.

  • Júlio Cesar Santos disse:

    Muito bom !

    Exatamente o que eu queria saber.

  • bruquinha disse:

    é possivel colocar if else if, else no dentro switch, case ? pois tem partes do programa que necessita disso agora me informe o que esses dois comando “switch” e “if” não aceita, não encontro em lugar nenhum

    • eduardo disse:

      Dentro do switch … case pode ter um bloco de comandos entre o case e o break, dentro desse bloco pode ter if …else caso seja necessário. Lembrando que o switch …case compara somente valores inteiros ou char, NÃO aceita float.

  • raquel disse:

    Obrigada cara! Simples e direto!

  • Débora disse:

    Muito Obrigada!!
    Me ajudou muitoooooo……..

  • Romualdo disse:

    //PARA DIVERTIR!
    /*Calcular o prêmio proporcional de cada ganhador do concurso, sendo que o total é cem mil, o primeiro ganhador recebe 46%, o segundo 32% e o terceiro o restante*/

    #include

    int main(int argc, char *argv[]){
    int i;
    float ganhador[3];
    float premio = 100000.;
    for (i=1; i<argc;i++){
    printf("%s\t", argv[i]);
    }
    for (i=0;i<=2;i++){
    switch (i)
    {
    case 0 :
    ganhador[i] = premio*.46;
    printf ("\n%dº ganhador recebe: R$ %.2f", i+1, ganhador[i]);
    break;

    case 1 :
    ganhador[i] = premio*.32;
    printf ("\n%dº ganhador recebe: R$ %.2f", i+1, ganhador[i]);
    break;

    default :
    ganhador[i] = premio-(ganhador[i-1]+ganhador[i-2]);
    printf ("\n%dº ganhador recebe: R$ %.2f", i+1, ganhador[i]);
    }
    }
    return 0;

  • Jonas disse:

    Obrigado mano ajudou bastante, continua assim, eu estava cego

  • Miranda disse:

    Queria fazer o Switch ler o numero que está dentro de cada espaço do meu vetor e verificar se o numero digitado está em algum desses espaços, alguém sabe como faço isso?
    Aqui está o que tentei e não obtive sucesso:

    #include “stdio.h”

    int main (){

    int numero [6];
    int contador = 0;
    int aux = 6;
    int valor;

    do{
    printf (“Digite %d numeros: “, aux);
    scanf (“%d”, & numero [contador]);
    contador++;
    aux–;
    }while (contador < 6);

    printf ("\nBusque um valor: ");
    scanf ("%d", & valor);

    switch(valor){
    case numero [0]:
    printf("P0");
    break;
    case numero [1]:
    printf("P1");
    break;
    case numero [2]:
    printf("P2");
    break;
    case numero [3]:
    printf("P#");
    break;
    case numero [4]:
    printf("P4");
    break;
    case numero [5]:
    printf(P5);
    break;

    default:
    printf("invalido");
    }

  • Renato Zapata disse:

    Você está usando uma variável que tem o valor alterado em tempo de execução, alguns compiladores requerem que o case possua uma constante definida em tempo de compilação. Neste caso, é melhor você if e else if em vez de case, tem o mesmo resultado!

    Como a seguir:
    int main (void){

    int numero [6];
    numero[0]=0;
    int contador = 0;
    int aux = 6;
    int valor;

    do{
    printf (“Digite %d numeros: “, aux);
    scanf (“%d”, &numero [contador]);
    contador++;
    aux–;
    }while (contador < 6);

    printf ("\nBusque um valor: ");
    scanf ("%d", &valor);

    if (numero[0]==valor)
    {
    printf("P0");
    }
    else if (numero[1]==valor)
    {
    printf("P1");
    }
    else if (numero[2]==valor)
    {
    printf("P2");
    }
    else if (numero[3]==valor)
    {
    printf("P3");
    }
    else if (numero[4]==valor)
    {
    printf("P4");
    }
    else if (numero[5]==valor)
    {
    printf("P5");
    }
    else
    {
    printf("invalido");
    }

    }