A Estrutura Condicional switch
O comando switch é uma alternativa eficiente e legível ao uso de múltiplos blocos if...else if, especialmente quando precisamos comparar uma única variável com diversos valores constantes.
Sintaxe e Regras
switch (expressao)
{
case valor1:
// Código executado se expressao == valor1
break;
case valor2:
// Código executado se expressao == valor2
break;
default:
// Executado se nenhum caso anterior for satisfeito
break;
}
No C#, a instrução break é obrigatória para evitar a execução sequencial indesejada dos blocos (fall-through), garantindo que apenas o código correspondente ao caso selecionado seja processado.
Exemplo: Identificador de Status de Pedido
Console.Write("Digite o código do status (1-3): ");
int statusPedido = int.Parse(Console.ReadLine());
switch (statusPedido)
{
case 1:
Console.WriteLine("Status: Processando");
break;
case 2:
Console.WriteLine("Status: Enviado");
break;
case 3:
Console.WriteLine("Status: Entregue");
break;
default:
Console.WriteLine("Status: Desconhecido");
break;
}
Loops de Repetição: while e do...while
Os laços de repetição permitem executar um bloco de código múltiplas vezes enquanto uma condição específica for verdadeira.
O Laço while
O while verifica a condição antes de executar o bloco de código. Se a condição for falsa logo de início, o código interno nunca será executado.
int contador = 10;
while (contador > 0)
{
Console.WriteLine($"Contagem regressiva: {contador}");
contador--;
}
O Laço do...while
Diferente do anterior, o do...while garente que o bloco de código seja executado pelo menos uma vez, pois a validação da condição ocorre apenas ao final da iteração.
Exemplo: Calculadora Persistente
Este exemplo combina o do...while para manter o programa rodando e o switch para processar a operação matemática escolhida.
string continuar;
do
{
Console.Clear();
Console.Write("Informe o primeiro valor: ");
double valorA = double.Parse(Console.ReadLine());
Console.Write("Informe a operação (+, -, *, /): ");
char operacao = Console.ReadKey().KeyChar;
Console.WriteLine();
Console.Write("Informe o segundo valor: ");
double valorB = double.Parse(Console.ReadLine());
switch (operacao)
{
case '+':
Console.WriteLine($"Soma: {valorA + valorB}");
break;
case '-':
Console.WriteLine($"Subtração: {valorA - valorB}");
break;
case '*':
Console.WriteLine($"Multiplicação: {valorA * valorB}");
break;
case '/':
if (valorB != 0)
Console.WriteLine($"Divisão: {valorA / valorB}");
else
Console.WriteLine("Erro: Divisão por zero.");
break;
default:
Console.WriteLine("Operação inválida.");
break;
}
Console.Write("Deseja realizar outro cálculo? (s/n): ");
continuar = Console.ReadLine().ToLower();
} while (continuar == "s");
Aplicação Prática: Desafio de Lógica
Abaixo, um exemplo de aplicação real utilizando a classe Random para criar um sistema de adivinhação. O loop continuará solicitando entradas do usuário até que ele acerte o número gerado aelatoriamente pelo sistema.
Random gerador = new Random();
int numeroAlvo = gerador.Next(1, 51); // Gera entre 1 e 50
int tentativa = 0;
Console.WriteLine("Tente adivinhar o número secreto entre 1 e 50!");
while (tentativa != numeroAlvo)
{
Console.Write("Seu palpite: ");
tentativa = int.Parse(Console.ReadLine());
if (tentativa < numeroAlvo)
{
Console.WriteLine("Muito baixo! Tente um valor maior.");
}
else if (tentativa > numeroAlvo)
{
Console.WriteLine("Muito alto! Tente um valor menor.");
}
else
{
Console.WriteLine("Excelente! Você acertou o número.");
}
}