Italo Info


Comando de decisão (Switch)

Como vimos na aula anterior, quando é necessário executar determinado conjunto de instruções, apenas, se determinada condição for verdadeira, podemos utilizar o if/alse. Inclusive, há outra alternativa ao if/else, o switch/case. Veja o exemplo abaixo:


#include <stdio.h>
#include <math.h>

int main() {
    char op;
    float base, altura, raio, resultado;
    
    printf("Calculadora de areas");
    printf("\n(1) - Retangulo");
    printf("\n(2) - Triangulo");
    printf("\n(3) - Circulo");
    printf("\n\n");
    
    printf( "Informe a opcao: " );
    fflush( stdin );
    fflush( stdout );
    op = getchar();    
    printf( "\n" );
    
    switch( op ) {
        case '1':
            printf("Informe a base: ");
            scanf("%f",&base);
            printf("Informe a altura: ");
            scanf("%f",&altura);
            
            resultado = base*altura;
            
            printf("\nA area do retangulo eh: %.2f",resultado);
            break;
        case '2':
            printf("Informe a base: ");
            scanf("%f",&base);
            printf("Informe a altura: ");
            scanf("%f",&altura);
            
            resultado = (base*altura)/2;
            
            printf("\nA area do triangulo eh: %.2f",resultado);            
            break;
        case '3':
            printf("Informe o raio: ");
            scanf("%f",raio);
            
            resultado = M_PI * ( raio * raio );
            
            printf("\nA area do circulo eh: %.2f",resultado);                        
            break;
        default:
            printf("\nOpcao invalida!");
    }
    
    return 0;
}

No exemplo acima é impresso um menu de calculadora de áreas. Logo após, é utilizada a função getchar() que não recebe nenhum parâmetro e serve para ler um dígito do teclado. Depois da leitura do caractere, é declarada a intrução switch/case. Repare que os cases são seguidos por valores chars, isso porque a variável op chamada no switch é do tipo char, se fosse inteira, os números teriam de não estar entre aspas. É importante esclarecer que cada case deve ser finalizado com um break. Preste atenção ao default declarado no final do comando. O default é semelhante ao else do if, caso a opção lida seja diferente dos valores verificados com cases, o bloco default é executado.

Repare também na chamada a fflush antes da utilização da função getchar. Isto é necessário para limpar os bufferes de entrada e saída padrões e a leitura funcionar corretamente.

Exercício

Faça uma calculadora semelhante ao exemplo anterior, sendo que, ao invés de cálculos de áreas, deve realizar cálculos aritméticos (Soma, Subtração, Multiplicação e Divisão). Por exemplo:

Calculadora aritmetica
1 - Soma
2 - Subtracao
3 - Multiplicacao
4 - Divisao

Informe o primeiro numero: 3
Informe o segundo numero: 4

O resultado da multiplicacao eh: 12