C++: Prática: Branching e Loops Abrangente

Última atualização: 2026-08-26

Aulas anteriores cobriram condicionais e loops separadamente, mas em programas reais eles são usados juntos.

Nesta aula, vamos praticar fazer branching e loops trabalharem juntos através de vários exemplos abrangentes.


1. Exemplo 1: Jogo de Adivinhação de Números (Versão Completa)

(1) 1.1 Análise de Requisitos

Vamos construir um jogo de adivinhação de números completo:

  1. O programa gera aleatoriamente um número de 1-100
  2. O usuário insere seu palpite
  3. Se o palpite for muito alto, mostrar "Muito alto"
  4. Se o palpite for muito baixo, mostrar "Muito baixo"
  5. Se o palpite estiver correto, parabenizar o usuário e mostrar quantas tentativas foram necessárias
  6. O usuário pode escolher jogar novamente

▶ Exemplo 1: Jogo de Adivinhação de Números Completo (Dificuldade ⭐⭐)

TEXT 📖 Somente leitura
#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
	std::srand(static_cast<unsigned int>(std::time(nullptr)));
	char playAgain;
	
	do {
		int secretNumber = std::rand() % 100 + 1;
		int guess;
		int attempts = 0;
		
		std::cout << "========== Number Guessing Game ==========\n";
		std::cout << "I'm thinking of a number from 1-100, guess it!\n\n";
		
		do {
			std::cout << "Enter your guess: ";
			std::cin >> guess;
			attempts++;
			
			if (guess > secretNumber) {
				std::cout << "Too high! Try again.\n";
			} else if (guess < secretNumber) {
				std::cout << "Too low! Try again.\n";
			} else {
				std::cout << "\n🎉 Congratulations! You got it!\n";
				std::cout << "You guessed " << attempts << " times.\n";
				
				if (attempts <= 5) {
					std::cout << "You're amazing!\n";
				} else if (attempts <= 10) {
					std::cout << "Not bad!\n";
				} else {
					std::cout << "Keep trying, aim for fewer attempts next time!\n";
				}
			}
			
		} while (guess != secretNumber);
		
		std::cout << "\nWant to play again? (y/n): ";
		std::cin >> playAgain;
		std::cout << std::endl;
		
	} while (playAgain == 'y' || playAgain == 'Y');
	
	std::cout << "Thanks for playing, goodbye!" << std::endl;
	return 0;
}

Saída:

TEXT 📖 Somente leitura
========== Number Guessing Game ==========

I'm thinking of a number from 1-100, guess it!


Enter your guess:
Too high! Try again.

Too low! Try again.


🎉 Congratulations! You got it!

You guessed  times.

You're amazing!

Not bad!

Keep trying, aim for fewer attempts next time!


Want to play again? (y/n):
Thanks for playing, goodbye!

Execução de exemplo:

TEXT 📖 Somente leitura
========== Number Guessing Game ==========
I'm thinking of a number from 1-100, guess it!

Enter your guess: 50
Too high! Try again.
Enter your guess: 25
Too low! Try again.
Enter your guess: 37
Too high! Try again.
Enter your guess: 31
🎉 Congratulations! You got it!
You guessed 4 times.
You're amazing!

Want to play again? (y/n): n

Thanks for playing, goodbye!

Análise do código:

  1. do-while externo: Controla "jogar novamente"
  2. do-while interno: Loop principal de adivinhação
  3. if-else if-else: Verifica se o palpite é muito alto/muito baixo/correto
  4. if-else aninhado: Avalia desempenho com base no número de tentativas


2. Exemplo 2: Agenda Simples

(1) 2.1 Análise de Requisitos

Construir um programa de agenda simples:

  1. Exibir um menu (adicionar contato, mostrar contatos, sair)
  2. Usuário seleciona uma operação
  3. Usar um loop para permitir operações contínuas até o usuário escolher sair

▶ Exemplo 2: Agenda Simples (Dificuldade ⭐⭐⭐)

CPP 📖 Somente leitura
#include <iostream>
#include <string>

int main() {
	const int MAX_CONTACTS = 100;
	std::string names[MAX_CONTACTS];
	std::string phones[MAX_CONTACTS];
	int count = 0;
	
	int choice;
	
	do {
		// Exibir menu
		std::cout << "========== Simple Address Book ==========\n";
		std::cout << "1. Add contact\n";
		std::cout << "2. Show all contacts\n";
		std::cout << "3. Exit\n";
		std::cout << "Choose (1-3): ";
		std::cin >> choice;
		
		if (choice == 1) {
			// Adicionar contato
			if (count >= MAX_CONTACTS) {
				std::cout << "Address book is full!" << std::endl;
			} else {
				std::cout << "Enter name: ";
				std::cin.ignore(); // Descartar newline
				std::getline(std::cin, names[count]);
				
				std::cout << "Enter phone: ";
				std::getline(std::cin, phones[count]);
				
				count++;
				std::cout << "Added successfully!" << std::endl;
			}
			
		} else if (choice == 2) {
			// Mostrar contatos
			if (count == 0) {
				std::cout << "Address book is empty!" << std::endl;
			} else {
				std::cout << "\n========== Contact List ==========\n";
				for (int i = 0; i < count; i++) {
					std::cout << i + 1 << ". " << names[i] << " - " << phones[i] << std::endl;
				}
				std::cout << "================================\n\n";
			}
			
		} else if (choice == 3) {
			std::cout << "Goodbye!" << std::endl;
			
		} else {
			std::cout << "Error: Please enter a number between 1-3!" << std::endl;
		}
		
		std::cout << std::endl;
		
	} while (choice != 3);
	
	return 0;
}
44 linhas de lógica (limite de 40, somente leitura)

Saída:

TEXT 📖 Somente leitura
========== Simple Address Book ==========

1. Add contact

2. Show all contacts

3. Exit

Choose (1-3):
Address book is full!
Enter name:
Enter phone:
Added successfully!
Address book is empty!

========== Contact List ==========

.  - 
================================


Goodbye!
Error: Please enter a number between 1-3!

💡 Dica: Este programa usa arrays (cobertos em detalhes na aula 09). Você pode copiá-lo por enquanto e entender a abordagem geral.



3. Exemplo 3: Calculadora Simples (Versão Estendida)

(1) 3.1 Análise de Requisitos

Construir uma calculadora que suporte múltiplos cálculos:

  1. Exibir um menu (adição, subtração, multiplicação, divisão, sair)
  2. Usuário seleciona uma operação
  3. Inserir dois números, exibir o resultado
  4. Usar um loop para permitir cálculos contínuos

▶ Exemplo 3: Calculadora Estendida (Dificuldade ⭐⭐)

TEXT 📖 Somente leitura
#include <iostream>
#include <iomanip>

int main() {
	int choice;
	
	do {
		// Exibir menu
		std::cout << "========== Simple Calculator ==========\n";
		std::cout << "1. Addition\n";
		std::cout << "2. Subtraction\n";
		std::cout << "3. Multiplication\n";
		std::cout << "4. Division\n";
		std::cout << "5. Exit\n";
		std::cout << "Choose (1-5): ";
		std::cin >> choice;
		
		if (choice >= 1 && choice <= 4) {
			double num1, num2;
			std::cout << "Enter the first number: ";
			std::cin >> num1;
			std::cout << "Enter the second number: ";
			std::cin >> num2;
			
			double result;
			bool valid = true;
			
			switch (choice) {
			case 1:
				result = num1 + num2;
				break;
			case 2:
				result = num1 - num2;
				break;
			case 3:
				result = num1 * num2;
				break;
			case 4:
				if (num2 != 0) {
					result = num1 / num2;
				} else {
					std::cout << "Error: Divisor cannot be 0!" << std::endl;
					valid = false;
				}
				break;
			}
			
			if (valid) {
				std::cout << std::fixed << std::setprecision(2);
				std::cout << "Result: " << result << std::endl;
			}
			
		} else if (choice == 5) {
			std::cout << "Goodbye!" << std::endl;
			
		} else {
			std::cout << "Error: Please enter a number between 1-5!" << std::endl;
		}
		
		std::cout << std::endl;
		
	} while (choice != 5);
	
	return 0;
}

Saída:

TEXT 📖 Somente leitura
========== Simple Calculator ==========

1. Addition

2. Subtraction

3. Multiplication

4. Division

5. Exit

Choose (1-5):
Enter the first number:
Enter the second number:
Error: Divisor cannot be 0!
Result:
Goodbye!
Error: Please enter a number between 1-5!


4. Erros Comuns e Depuração

(1) 4.1 Loops Infinitos

Exemplo de erro:

CPP
int i = 1;
while (i <= 10) {
	std::cout << i << " ";
	// ❌ Esqueceu i++, i é sempre 1, loop nunca termina
}

Dica de depuração: Adicione saída dentro do loop para verificar o valor da variável do loop:

CPP
int i = 1;
while (i <= 10) {
	std::cout << "[DEBUG] i = " << i << std::endl;
	std::cout << i << " ";
	i++; // ✅ Lembre-se de atualizar a variável do loop
}

(2) 4.2 Condição de Loop Errada

Exemplo de erro:

CPP
// ❌ Quer exibir 1-10, mas a condição é i < 10, só exibe 1-9
for (int i = 1; i < 10; i++) {
	std::cout << i << " ";
}

Dica de depuração: Antes do loop começar, exiba o valor inicial da variável e a condição:

CPP
int i = 1;
std::cout << "[DEBUG] Initial value i = " << i << ", condition i <= 10" << std::endl;
while (i <= 10) {
	std::cout << i << " ";
	i++;
}



5. Exercício Prático: Simulador de ATM

▶ Exemplo 4: Simulador de ATM Simples (Dificuldade ⭐⭐⭐)

CPP 📖 Somente leitura
#include <iostream>
#include <iomanip>

int main() {
	double balance = 1000.00; // Saldo inicial
	int choice;
	
	do {
		// Exibir menu
		std::cout << "========== ATM Simulator ==========\n";
		std::cout << "1. Check balance\n";
		std::cout << "2. Deposit\n";
		std::cout << "3. Withdraw\n";
		std::cout << "4. Exit\n";
		std::cout << "Choose (1-4): ";
		std::cin >> choice;
		
		if (choice == 1) {
			// Verificar saldo
			std::cout << std::fixed << std::setprecision(2);
			std::cout << "Current balance: " << balance << std::endl;
			
		} else if (choice == 2) {
			// Depositar
			double amount;
			std::cout << "Enter deposit amount: ";
			std::cin >> amount;
			
			if (amount > 0) {
				balance += amount;
				std::cout << "Deposit successful!" << std::endl;
			} else {
				std::cout << "Error: Deposit amount must be greater than 0!" << std::endl;
			}
			
		} else if (choice == 3) {
			// Sacar
			double amount;
			std::cout << "Enter withdrawal amount: ";
			std::cin >> amount;
			
			if (amount > 0 && amount <= balance) {
				balance -= amount;
				std::cout << "Withdrawal successful!" << std::endl;
			} else if (amount <= 0) {
				std::cout << "Error: Withdrawal amount must be greater than 0!" << std::endl;
			} else {
				std::cout << "Error: Insufficient balance!" << std::endl;
			}
			
		} else if (choice == 4) {
			std::cout << "Thank you for using, goodbye!" << std::endl;
			
		} else {
			std::cout << "Error: Please enter a number between 1-4!" << std::endl;
		}
		
		std::cout << std::endl;
		
	} while (choice != 4);
	
	return 0;
}
45 linhas de lógica (limite de 40, somente leitura)

Saída:

TEXT 📖 Somente leitura
========== ATM Simulator ==========

1. Check balance

2. Deposit

3. Withdraw

4. Exit

Choose (1-4):
Current balance: 
Enter deposit amount:
Deposit successful!
Error: Deposit amount must be greater than 0!
Enter withdrawal amount:
Withdrawal successful!
Error: Withdrawal amount must be greater than 0!
Error: Insufficient balance!
Thank you for using, goodbye!
Error: Please enter a number between 1-4!

Execução de exemplo:

TEXT 📖 Somente leitura
========== ATM Simulator ==========
1. Check balance
2. Deposit
3. Withdraw
4. Exit
Choose (1-4): 1
Current balance: 1000.00

Choose (1-4): 2
Enter deposit amount: 500
Deposit successful!

Choose (1-4): 1
Current balance: 1500.00

Choose (1-4): 4
Thank you for using, goodbye!

❓ Perguntas Frequentes

P: Quando devo usar for vs while? R: Use for quando você sabe o número de iterações (ex.: imprimir 100 vezes); use while quando não sabe a contagem mas sabe a condição (ex.: adivinhar até acertar); use do-while quando o corpo deve executar pelo menos uma vez. P: Como break e continue trabalham juntos em um loop? R: break sai do loop inteiro, continue pula a iteração atual e vai para a próxima. Podem ser misturados, mas certifique-se de que a lógica esteja clara — break termina completamente, continue apenas pula a iteração atual. P: Por que meu programa tem problemas ao ler strings em um loop? R: Isso geralmente é causado por misturar cin >> e getline. Solução: adicione cin.ignore() após cin >> para descartar o caractere de nova linha.


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Escreva um programa que permita ao usuário inserir um inteiro positivo n, depois exiba todos os números pares de 1 a n.

  2. Intermediário (Dificuldade ⭐⭐): Escreva um programa que implemente um jogo de "Pedra-Papel-Tesoura":

    1. Permita que o usuário insira 1 (pedra), 2 (tesoura), 3 (papel)
    2. O programa gera aleatoriamente uma escolha
    3. Determine o vencedor e exiba o resultado
    4. O usuário pode escolher "jogar novamente"
  3. Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente um "Sistema Simples de Gerenciamento de Notas de Alunos": 5. Funcionalidades: adicionar alunos (nome, nota), mostrar todos os alunos, calcular média, sair 6. Use um loop de menu para operações contínuas 7. (Opcional) Adicione um recurso de "ordenar por nota"


6. 🚀 Próximos Passos

Parabéns! Você completou todas as aulas da Fase 1 (Básico). A seguir, entramos na Fase 2 (Funções), aprendendo como encapsular código em módulos reutilizáveis para programas mais organizados e maintaináveis!

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%