Conteúdo da Aula - 10/06 (switch)
Por favor, estudem o Capítulo 2 do livro texto.
Adicionalmente, esses são os comentários da aula:
Em C, para trabalharmos com condições no seu programa, utilizamos a instrução if
. Com ele, podemos ter várias condições em nosso programa, como:
Porém, em programas maiores, tal utilização do if
não é adequada, tanto logicamente quanto computacionalmente.
Explicação: se a letra
digitada for a
, o condicional do primeiro if
será verdadeiro, executando assim seu escopo. Da mesma forma, os outros condicionais serão falsos e o computador vai perder processamento ao tentar fazer cada um deles.
Por isso, torna-se necessário fazer os condicionais (if
) aninhados, como no exemplo abaixo:
Nesse caso, pode-se notar que sempre comparamos a variável letra
com uma constante (‘a’, ‘e’, ‘i’, ‘o’, ‘u’). Para esses casos, a linguagem C possui uma instrução que facilita essa escrita e também o trabalho com sequências de constantes, que é o switch
:
Utilizando o switch
, o último exemplo pode ser reescrito assim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main()
{
char letra;
printf("Digite uma letra: ");
scanf("%c", &letra);
switch (letra)
{
case 'a':
printf("Você digitou uma vogal\n");
break;
case 'e':
printf("Você digitou uma vogal\n");
break;
case 'i':
printf("Você digitou uma vogal\n");
break;
case 'o':
printf("Você digitou uma vogal\n");
break;
case 'u':
printf("Você digitou uma vogal\n");
break;
default:
printf("Você não digitou uma vogal\n");
}
}
Explicação:
- Linha 7: instrução
switch
, que vai colocar em evidência, ou seja, vai obter o valor da variável que está entre parênteses (nesse caso,letra
) e vai comparar com todos oscase
(s) dentro de seu escopo (código dentro de suas chaves). - Linha 9: é nosso primeiro condicional do switch, comparando
letra
com ochar
‘a’. É como se estivéssemos fazendo:if (letra == 'a') ...
Caso esse condicional funcione, tudo escrito após os dois pontos (:
) até o primeirobreak
ou o fim do escopo serão executados. - Linha 11: caso o condicional anterior (comparação de letra com ‘a’) dê verdadeiro, esse
break
fará com que o código abaixo não seja executado. - Outros case e break: seguem o mesmo padrão explicado acima.
- Linha 24: só pode existir um
default
dentro de cadaswitch
utilizado no programa. Ele que determina o caso geral, ou seja, se não casar com nenhum caso antes dele, ele será executado. Odefault
sempre deve ser colocado no final doswitch
, ou seja, depois de todos oscase
` existentes nesse escopo.
O código acima ainda possui muita repetição de código. Notem que o printf("Você digitou uma vogal\n");
é repetido 5 vezes. Por isso (e também utilizando o que o switch
permite), o código pode ser reescrito melhor da seguinte forma:
E agora, sabendo disso, podemos melhorar ainda mais nosso programa, tomando cuidado com letras maiúsculas e minúsculas:
O switch também permite trabalhar com faixas de valores, desde que eles sejam sequenciais. Leia e estude o exemplo abaixo:
Ele também é muito utilizado em menu de opções:
Have fun!!