Tomando decisões: if e switch
Faça o seu programa escolher o que fazer com if, else, operadores lógicos e switch.
- Ramificar com
if,else ifeelse - Combinar condições com
&&,||e! - Usar
switchpara muitos casos fixos - e lembrar dobreak
Até aqui, os programas rodaram todas as linhas de cima para baixo. O controle de fluxo deixa um programa escolher quais linhas rodam. A ferramenta mais simples é o if: rodar um bloco só quando uma condição é verdadeira.
if, else if, else
1#include <stdio.h>
2
3int main(void) {
4 int score = 83;
5
6 if (score >= 90) {
7 printf("A\n");
8 } else if (score >= 80) {
9 printf("B\n");
10 } else if (score >= 70) {
11 printf("C\n");
12 } else {
13 printf("Keep practicing\n");
14 }
15 return 0;
16}B
As condições são verificadas em ordem, e só o primeiro ramo verdadeiro roda. É por isso que score >= 80 não precisa também de score < 90: se a nota fosse 90 ou mais, o primeiro ramo já teria rodado. Experimente mudar score e rodar de novo.
O que conta como verdadeiro
O C não tem um tipo booleano especial no seu núcleo: zero é falso, e qualquer valor diferente de zero é verdadeiro. As comparações produzem 1 ou 0. Desde o C99, você pode fazer #include <stdbool.h> para ter bool, true e false, que deixam a intenção mais clara - use-os.
Combinando condições
a && bé verdadeiro quando os dois são verdadeiros.a || bé verdadeiro quando pelo menos um é verdadeiro.!ainverte verdadeiro e falso.
Tanto && quanto || fazem curto-circuito: eles param assim que a resposta é conhecida. Em count > 0 && total / count > 10, a divisão nunca acontece quando count é 0 - um jeito prático de se proteger contra divisão por zero.
1#include <stdio.h>
2#include <stdbool.h>
3
4int main(void) {
5 int age = 15;
6 bool with_adult = true;
7
8 if (age >= 18 || with_adult) {
9 printf("Entry allowed\n");
10 }
11 if (age >= 13 && age <= 19) {
12 printf("Teen ticket\n");
13 }
14 return 0;
15}Entry allowed Teen ticket
switch
Quando você compara um inteiro (ou um char) com muitos valores fixos, o switch é mais limpo do que uma longa cadeia de if:
1#include <stdio.h>
2
3int main(void) {
4 char choice = 's';
5
6 switch (choice) {
7 case 'n':
8 printf("New game\n");
9 break;
10 case 'l':
11 printf("Load game\n");
12 break;
13 case 's':
14 printf("Settings\n");
15 break;
16 default:
17 printf("Unknown option\n");
18 break;
19 }
20 return 0;
21}Settings
Cada rótulo case marca onde a execução começa. Sem break, ela continua para o próximo caso - o chamado fall-through. De vez em quando é isso que você quer (vários casos compartilhando um bloco), mas esquecer um break é um bug muito comum. O default roda quando nenhum caso corresponde.
Principais conclusões
if/else if/elseverifica as condições em ordem e roda só o primeiro ramo verdadeiro.Zero é falso, qualquer outra coisa é verdadeira.
&&e||fazem curto-circuito. Escreva intervalos comox > 0 && x < 10.O
switchpula para umcasecorrespondente; termine cada caso combreak, a menos que você realmente queira o fall-through.
Quiz da aula
6 perguntas · aprovação com 5 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Pratique: escreva código em C
Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.
FizzBuzz para um número
Leia um inteiro. Imprima FizzBuzz se ele for divisível por 3 e por 5, Fizz se só por 3, Buzz se só por 5 e, nos outros casos, o próprio número.
- 15 imprime FizzBuzz
- 9 imprime Fizz
- 10 imprime Buzz
- 7 imprime 7
Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.
Calculadora minúscula
Leia uma expressão como 12 * 3 - um número, um caractere de operador e um número - e imprima o resultado. Suporte +, -, * e / usando um switch. Para divisão por zero, imprima Error: division by zero. Para qualquer outro operador, imprima Error: unknown operator.
Leia com scanf("%d %c %d", &a, &op, &b). Divisão inteira não tem problema.
- 12 * 3
- 20 / 6
- 5 / 0
- 2 ^ 3
Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…