Estruturas de Controle de Fluxo e Loops de Repetição em C#

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.");
    }
}

Tags: CSharp dotnet Condicionais loops desenvolvimento-backend

Publicado em 7-16 01:08