Comando switch...case

Sintaxe:

   switch (expressão) 
   {
      case constante 1:
      { bloco de comandos 1...;
        break;
      }
      case constante 2:
      { bloco de comandos 2...;
        break;
      }
      .......
      default : 
      { 
         bloco de comandos n... 
      }
   }

Caso seja necessário realizar operações baseadas em um valor de uma expressão ou variável em vez de se construir para isto uma cadeia de if...else...if...else..if...else pode-se utilizar o comando de seleção múltipla switch…case.

Inicialmente o valor da expressão é avaliado. Depois é feita uma comparação com cada valor colocado na seção case. Caso o valor seja coincidente o bloco ligado ao case será executado. Convém ressaltar que a execução continuará na ordem que os comandos aparecem, indiferentemente se eles fazem parte de outro case. Para interromper a execução deve-se utilizar a cláusula break, indicando que deve ser interrompido a execução e passar a executar os comandos após o switch.

Existe a possibilidade de colocar uma condição para que, se nenhum case foi selecionado, um bloco seja executado. A palavra default indicará este bloco padrão a ser executado.

Veja o exemplo:

#include <stdio.h>
int main (void)
{
   int iValor_01;
   printf("Entre com um numero : ");
   scanf("%d", &iValor_01);
 
   switch (iValor_01) /* aqui a variável vai ser avaliada */
   {
      case 1:  /* aqui o valor (constante) que será utilizada na comparação */
      {
         printf("Um\n");
         break;
      }
      case 2: 
      {
         printf("Dois\n");
         break;
      }
      case 3: 
      {
         printf("Tres\n");
         break;
      }
      case 4: 
      {
         printf("Quatro\n");
         break;
      }
      case 5: 
      {
         printf("Cinco\n");
         break;
      }
      case 6: 
      {
         printf("Seis\n");
         break;
      }
      case 7: 
      {
         printf("Sete\n");
         break;
      }
      case 8:
      {
         printf("Oito\n");
         break;
      }
      case 9: 
      {
         printf("Nove\n");
         break;
      }
      default: /* Se nenhuma opção anterior corresponder a variável informada. */
      {
         printf("Valor nao associado\n");
         break; /* Não precisa deste comando aqui, afinal não existem mais condições para serem avaliadas dentro do switch */
      }
   }
   return 0;
}

Caso não seja utilizado o comando break, todos os demais comandos/instruções serão executados, até encontrar o próximo comando break, após a primeira condição verdadeira.

Veja o exemplo:

#include <stdio.h>
int main (void)
{
   int iValor_01;
   printf("Entre com um numero : ");
   scanf("%d", &iValor_01);
 
   switch (iValor_01) /* aqui a variável vai ser avaliada */
   {
      case 1:  /* aqui o valor (constante) que será utilizada na comparação */
      {
         printf("Um\n");
         break;
      }
      case 2: 
      {
         printf("Dois\n");
         break;
      }
      case 3: 
      {
         printf("Tres\n");
         break;
      }
      case 4: 
      {
         printf("Quatro\n");
         break;
      }
      case 5: 
      {
         printf("Cinco\n");
         break;
      }
      case 6: 
      {
         printf("Seis\n");
         break;
      }
      case 7: 
      {
         printf("Sete\n"); /* Não colocado o comando break. Todos os comandos serão avaliados até o próximo break. */
      }
      case 8:
      {
         printf("Oito\n"); /* Não colocado o comando break. Todos os comandos serão avaliados até o próximo break. */
      }
      case 9: 
      {
         printf("Nove\n");
         break;
      }
      default: /* Se nenhuma opção anterior corresponder a variável informada. */
      {
         printf("Valor nao associado\n");
         break; /* Não precisa deste comando aqui, afinal não existem mais condições para serem avaliadas dentro do switch */
      }
   }
   return 0;
}

Sabendo disto, é possível realizar OU lógicos com o switch.

#include <stdio.h>
 
int main(void)
{
   int iValor_01;
   printf("\nEntre com um número:");
   scanf("%d", &iValor_01);
 
   /* este bloco de instruções, faz a mesma coisa que o switch a seguite */
   if( iValor_01 == 1 ||
       iValor_01 == 3 ||
       iValor_01 == 5 ||
       iValor_01 == 7 ||
       iValor_01 == 9 )
   {
       printf("Você digitou 1,3,5,7 ou 9.\n");
   }
   else if( iValor_01 == 0 ||
            iValor_01 == 2 ||
            iValor_01 == 4 ||
            iValor_01 == 6 ||
            iValor_01 == 8 )
   {
       printf("Você digitou 0,2,4,6 ou 8.\n");
   }
   else
   {
      printf("Você digitou um número >= 10.\n");
   }
 
   /* operações || com switch */
   switch( iValor_01 )
   {
      case 1:
      case 3:
      case 5:
      case 7:
      case 9:
      {
         printf("Você digitou 1,3,5,7 ou 9.\n");
         break;
      }
      case 0:
      case 2:
      case 4:
      case 6:
      case 8:
      {
         printf("Você digitou 0,2,4,6 ou 8.\n");
         break;
      }
      default:
      {
         printf("Você digitou um número >= 10.\n");
      }
   }
   return 0;
}

Marcos Laureano 2008/05/04 04:31

switch.txt · Última modificação: 2008/05/05 14:55 por laureano
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0