Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Comando switch
  2. Múltiplos cases
  3. case com intervalo
  4. switch com enumerador
  5. switch com char
  6. switch e função como argumento
  7. switch e expressão como argumento
  8. switch e array e struct

A linguagem de programação C fornece o comando de escolha switch. Nesta parte do tutorial vamos aprender esse comando.

Os comandos de escolha bem como o seus funcionamentos já foram discutidos em Portugol: Comandos de Escolha sendo a leitura recomendada.

Para fazermos escolhas da linguagem de programação C, utilizamos o comando switch que possui sua sintaxe apresentada abaixo. O comando switch utiliza o comando break como parte de seu corpo não sendo obrigatório em algumas situações.

Fig. 1: Fluxograma do Comando switch
Sintaxe
switch(valor/expressao)
{
    case 1: 
	    //bloco de código
    break;
    case 2: 
	    //bloco de código
    break;
    default:
	    //bloco de código
    break;
}
Onde
valor: valor int para comparação
case 1..2: Trecho de código para execução caso o retorno da comparação do caso seja verdadeira

Quando o switch é executado, valor é comparado sequencialmente a todos os valores contidos nas cláusulas case até que a comparação seja verdadeira. Assim, um bloco de código é executado e e encerrado ao executar break.

O case default é executado caso nenhum case testado seja verdadeiro. O uso desse case não é obrigatório, mas por boa prática deve ser utilizado para verificação de erros.

Não é permitido o uso de string como valor e case do comando switch, sendo apenas permitido o uso de valores numéricos inteiros.

Exemplo 1
#include <stdio.h>

int main()
{
    int opcao = 2;
    switch(opcao)
    {
    case 1:
        printf("tipo 1");
    break;
    case 2:
        printf("tipo 2");
    break;
    default:
        printf(“opcao invalida”);
    }
}
Saída
tipo 2

Para a execução de um mesmo trecho de código para mais de um case, basta adicionar as cláusulas case um abaixo do outro separadas por (:) e apenas um comando break para o encerramento.

Exemplo 2
#include <iostream>

int main ()
{
    int valor = 1;
    
    switch(valor)
    {
        case 1:
        case 3: printf("tipo 1"); break;
        default: printf("valor inválido"); break;
    }
    return 0;
}
Saída
tipo 1

Além os uso de mais de um case mostrado acima, C também permite que o operador de intervalo (...) seja utilizado. Assim, podemos declarar um intervalo de dados sem a necessidade de utilizar vários cases:

Exemplo 3
#include <stdio.h>
int main()
{
    int valor = 9;
    switch(valor)
    {
        case 0 ... 2:
            printf("0...2");
        break;
        case 3 ... 7:
            printf("3...7");
        break;
        case 8 ... 15:
            printf("8...15");
        break;
        default:
            printf("outro intervalo");
        break;
    }
    return 0;
}
Saída
8...15

O uso do switch como no exemplos acima, também pode ser feito com intervalo de dados do tipo char e enumeradores.

A linguagem C permite que o switch seja utilizando em conjunto com enumeradores. Esse assunto foi visto em C: Enum.

Exemplo 4
#include <stdio.h>

enum opcoes 
{
    UM,
    DOIS
};

int main()
{
    enum opcoes opcao= UM;
    switch(opcao)
    {
        case UM: 
        printf("tipo 1"); break;
        case DOIS: 
        printf("tipo 2");  break;
        }
    }
}
Saída
tipo 1

Além de enumeradores, a linguagem C permite que o switch também possa ser utilizando em conjunto com o tipo char como pode ser visto no exemplo abaixo:

Exemplo 5
#include <stdio.h>
int main()
{
    char letra = 'Z';
    switch(letra)
    {
        
        case 'a':
        case 'A':
            printf("letra Z ou z");
        break;
        case 'z':
        case 'Z':
            printf("letra Z ou z");
        break;
        default:
            printf("outra letra");
            break;
    }
    return 0;
}
Saída
letra Z ou z

O retorno de uma função pode ser utilizado como expressão de comparação para os cases do comando switch.

Exemplo 6
#include <stdio.h>
int funcao(int p)
{
    if(p == 0 )
        return 0;
    
    if(p == 1)
        return 1;
        
    if(p == 2)
        return 2;
        
    return -1;
}

int main() 
{
    
    int i = 1;

    switch(funcao(1))
    {
        case 0: printf("0"); break;
        case 1: printf("1"); break;
        case 2: printf("2"); break;
        default:printf("inválido") break;
    }
    
    return 0;
}
Saída
1

Outras expressões utilizando outros operadores devem retornar um valor numérico para serem utilizadas.

Exemplo 7
#include <stdio.h>

int main() 
{
    
    int i = 1;
    int j = 0xaa;
    switch((i > 0 && i < 10) || j&1 == 0) //j par
    {
        case 0: printf("0");break;
        case 1: printf("1");break;
    }
    
    return 0;
}
Saída
1
  1. 21/10/2025 - revisão 5 - Adição: switch: função como argumento e expressão como argumento. Ajuste: link portugol
  2. 03/09/2025 - revisão 4 - Ajustes: pontuais, target de link portugol, sintaxe e objetivos 'múltiplos' e 'intervalo'
  3. 10/03/2025 - revisão 3 - Correção em exemplo 2, adição de switch com char e switch com intervalo
  4. 08/10/2024 - revisão 2 - Ajustes pontuais
  5. 28/09/2023 - revisão 1 - Correção em erros gramaticais, sintaxe, layout e adição de fluxograma e exemplo switch + enum
  6. 19/05/2023 - versão inicial