quinta-feira, 29 de outubro de 2009

Deixe que o computador decida... Parte IV (switch)

Hoje vamos seguir conhecendo os comandos de decisão do C.

Já vimos como tomar decisões que produzem saídas simples, do tipo faça ou não faça.
E quando as possibilidades de saídas aumentam?
Imagine um programa para imprimir o nome de um mês de acordo com o número deste mês.
Usando as regras de indentação, o código fonte vai ficando cada vez maior à medida que acrescentamos novas avaliações.



//PROGRAMA PARA IMPRIMIR O MÊS DE ACORDO COM O NÚMERO
//USANDO IFs ANINHADOS
#include <stdio.h>
#include <stdlib.h>
 
int main(){
 int mes;
 
 printf("Digite os digitos do mes:\n->");
 scanf("%d",&mes);
 if (mes == 1)
    printf("Janeiro\n");
 else
    if (mes == 2)
        printf("Fevereiro\n");
    else
        if (mes == 3)
            printf("Marco\n");
        else
            if (mes == 4)
                printf("Abril\n");
    .
    .
    .
    .
 else
    printf("O valor nao corresponde a um mes!\n");
 system("pause");
}


Para evitar esta progressão geométrica de aumento de espaços e tabulações (tanto que não pude colocar todo o código aqui, devido as limitações de espaço de exibição), O C nos dá a opção de usar o comando switch.

Uma lista de opções
Você já deve ter visto várias listas de opções: uma opção embaixo da outra, facilitando a visualização de todas elas.
O comando switch se parece com uma lista destas.
Olhe como ficaria o código acima usando o switch:


//PROGRAMA PARA IMPRIMIR O MÊS DE ACORDO COM O NÚMERO
//USANDO SWITCH
#include <stdio.h>
#include <stdlib.h>
 
int main(){
 int mes;
 
 printf("Digite os digitos do mes:\n->");
 scanf("%d",&mes);
 switch (mes){
    case 1:
       printf("Janeiro\n");
       break;
    case 2:
       printf("Fevereiro\n");
       break;
    case 3:
       printf("Marco\n");
       break;
    case 4:
       printf("Abril\n");
       break;
    case 5:
       printf("Maio\n");
       break;
    case 6:
       printf("Junho\n");
       break;
    case 7:
       printf("Julho\n");
       break;
    case 8:
       printf("Agosto\n");
       break;
    case 9:
       printf("Setembro\n");
       break;
    case 10:
       printf("Outubro\n");
       break;
    case 11:
       printf("Novembro\n");
       break;
    case 12:
       printf("Dezembro\n");
       break;
    default:
       printf("O valor nao corresponde a um mes!\n");
 }
 system("pause");
}


Algumas coisas chamam a atenção neste código.
A 1ª delas é a forma de uso do switch da linha 11. Entre os () fica a variável que será avaliada. O switch só trabalha com variáveis dos tipos char e int. Além disto, observe o uso de {} para indicar as opções que serão avaliadas.
A 2ª coisa que devemos reparar é na palavra case, que aparece pela 1ª vez na linha 12, seguida pelo número 1 e um :. Aqui aparece o valor que a variável avaliada pode assumir, neste caso 1.
Se a variável tiver um valor igual ao que segue a palavra case, os comandos abaixo deste case serão executados até o comando break.
O comando break encerra o switch, ou seja, o programa 'salta' para o comando seguinte ao bloco do switch. Ele é chamado de comando de desvio; e, além do switch, também pode trabalhar em conjunto com outros comandos, como veremos mais a frente em nossos estudos.
A 3ª coisa que devemos reparar é na palavra default, que aparece na linha 48, também seguida por :. O uso do default é opcional. Mas se usado, ele deve ser colocado abaixo de todas as opções possíveis, antes do fim do bloco do switch.
Se a variável não tiver um valor igual a nenhum dos anteriores, os comandos abaixo dele serão executados. Observe que após o default não é necessário o uso do comando break, já que não existem opções depois dele, e o switch será mesmo finalizado.

O switch é simples, mas muito útil. Veremos mais sobre algumas características dele no próximo post, onde encerraremos nossa série sobre os comandos de decisão, vendo algumas curiosidades sobre os comandos de decisão.

Até lá.

PS: O que você está achando do blog? Tem alguma coisa que não ficou clara? Ou que você tem uma forma melhor de explicar? COMENTE! Ajude a tornar este blog melhor!

2 comentários:

  1. Oi cara... fiz que nem igualzinho o seu aí, só que o comando else não tá funcionando.. alguma dica?

    ResponderExcluir
  2. Estou gostando muito do seu blog

    ResponderExcluir