Notebook exibindo código em um ambiente de desenvolvimento
Uma repetição possui início, condição, ação e atualização. Crédito da foto.
Compartilhe este conteúdo

A estrutura for repete um bloco de código quando o controle da repetição pode ser expresso com clareza por uma inicialização, uma condição e uma atualização. Ela é muito usada quando conhecemos a quantidade de repetições, mas também atende outros casos em que essas três partes tornam o laço legível.

A estrutura básica

for (int numero = 1; numero <= 5; numero++)
{
    Console.WriteLine(numero);
}

O comando exibirá os números de 1 a 5. Dentro dos parênteses existem três partes separadas por ponto e vírgula.

  1. int numero = 1: inicialização. A variável é criada e começa com 1.
  2. numero <= 5: condição. A repetição continua enquanto ela for verdadeira.
  3. numero++: atualização. Após cada volta, o valor aumenta em uma unidade.

O que acontece em cada volta?

  1. A variável numero recebe 1.
  2. O programa verifica se 1 é menor ou igual a 5.
  3. Como a condição é verdadeira, mostra 1.
  4. Executa numero++, e o valor passa a 2.
  5. Repete a verificação e continua até mostrar 5.
  6. Quando o valor chega a 6, a condição fica falsa e o laço termina.
Atenção às aspas: Console.WriteLine("numero") mostra a palavra “numero”. Console.WriteLine(numero) mostra o valor guardado na variável.

Exemplo: mostrar apenas números pares

for (int numero = 2; numero <= 10; numero += 2)
{
    Console.WriteLine(numero);
}

O valor começa em 2 e aumenta de dois em dois. O resultado será 2, 4, 6, 8 e 10.

Exemplo: somar valores digitados

double total = 0;

for (int item = 1; item <= 3; item++)
{
    Console.Write("Digite o valor do item: ");
    double valor = Convert.ToDouble(Console.ReadLine());
    total += valor;
}

Console.WriteLine("Total: R$ " + total);

A variável total precisa ser criada antes do laço para conservar a soma entre as repetições. O texto digitado pelo teclado chega como texto; por isso é convertido para double.

Exemplo: calcular média

double soma = 0;

for (int contador = 1; contador <= 4; contador++)
{
    Console.Write("Digite a nota: ");
    double nota = Convert.ToDouble(Console.ReadLine());
    soma += nota;
}

double media = soma / 4;
Console.WriteLine("Média: " + media);

Erros comuns

Condição que nunca fica falsa

Se a variável não for atualizada corretamente, o laço pode continuar indefinidamente. Verifique se o valor se aproxima do limite.

Usar a direção errada

Se o valor começa em 1 e a condição é chegar a 10, normalmente ele deve aumentar. Usar numero-- faria o valor se afastar do objetivo.

Começar ou terminar no número errado

Compare < com <=. A primeira condição não inclui o limite; a segunda inclui.

Desafio

Crie um programa que solicite cinco preços, mostre o total e informe quantos valores foram maiores que R$ 100. Planeje primeiro as variáveis necessárias.

Aprenda a rastrear o laço antes de executar

Quando um for parece confuso, monte uma tabela de rastreamento com o valor do contador, o resultado da condição e a saída de cada repetição. Para for (int i = 1; i <= 5; i += 2), os valores usados no corpo são 1, 3 e 5. Depois de imprimir 5, o incremento produz 7; a condição se torna falsa e o laço termina. Esse método revela erros de limite sem depender de tentativa e erro.

int soma = 0;
for (int i = 1; i <= 5; i++)
{
    soma += i;
}
Console.WriteLine(soma); // 15

A variável soma precisa existir antes do laço porque acumula resultados de todas as repetições. Se fosse declarada dentro do bloco, voltaria a zero em cada passagem e deixaria de representar o total. Para conferir o código, calcule manualmente: 0 + 1, depois + 2, + 3, + 4 e + 5.

Desafio com critérios de verificação

Escreva um programa que mostre os múltiplos de 3 entre 3 e 30 e, ao final, informe quantos valores foram exibidos e a soma deles. Antes de executar, preencha uma tabela com as dez repetições esperadas. Teste depois dois erros propositais: trocar <= por < e usar incremento de 1 sem condição adicional. Explique por que cada saída muda.

Se ainda for difícil decompor a tarefa em passos, revise o conceito de algoritmo antes de transformar a solução em C#.

Projeto completo: analisar cinco vendas

Vamos usar o for em uma tarefa que exige mais do que imprimir números. O programa receberá cinco valores, recusará entradas inválidas, calculará faturamento e média e identificará a maior venda. O exemplo combina contador, acumulador, validação e comparação.

const int quantidadeVendas = 5;
decimal total = 0;
decimal maiorVenda = 0;

for (int numero = 1; numero <= quantidadeVendas; numero++)
{
    decimal valor;

    while (true)
    {
        Console.Write($"Valor da venda {numero}: R$ ");
        bool valido = decimal.TryParse(Console.ReadLine(), out valor);

        if (valido && valor >= 0)
            break;

        Console.WriteLine("Digite um valor numérico maior ou igual a zero.");
    }

    total += valor;

    if (valor > maiorVenda)
        maiorVenda = valor;
}

decimal media = total / quantidadeVendas;
Console.WriteLine($"Total: R$ {total:F2}");
Console.WriteLine($"Média: R$ {media:F2}");
Console.WriteLine($"Maior venda: R$ {maiorVenda:F2}");

Por que cada variável existe?

VariávelPapelQuando muda
numeroControla qual venda está sendo lidaNo iterador do for
valorGuarda a venda da repetição atualApós uma entrada válida
totalAcumula todas as vendasUma vez por repetição
maiorVendaPreserva o maior valor observadoSomente quando aparece valor maior
mediaResume o conjuntoDepois que o laço termina

O while interno não substitui o for. O for controla as cinco vendas; o while repete apenas a leitura atual até o usuário fornecer um valor aceitável. Essa separação expressa duas regras diferentes.

Teste o laço com resultados conhecidos

Use primeiro os valores 10, 20, 30, 40 e 50. O total esperado é 150, a média é 30 e a maior venda é 50. Depois teste cinco zeros, um valor inválido seguido de um válido e valores com casas decimais. Prever a saída antes de executar ajuda a distinguir erro de lógica de erro de digitação.

Documentação oficial: a referência da linguagem C# sobre instruções de iteração confirma que o corpo do for é executado enquanto a expressão booleana for verdadeira e detalha inicializador, condição e iterador.

Quando não usar for

Use foreach quando a intenção principal for visitar cada elemento de uma coleção sem controlar índices. Use while quando a repetição depender de uma condição cuja quantidade de tentativas não é conhecida, como validar uma entrada. Use do while quando o bloco precisar executar pelo menos uma vez. A escolha deve revelar a intenção do código.

Extensão do projeto

Adicione um contador de vendas acima de R$ 100 e mostre a porcentagem que elas representam. Antes de alterar o programa, escreva: a variável necessária, seu valor inicial, a condição que a modifica e três casos de teste. Depois explique por que o cálculo da porcentagem deve ocorrer fora do laço.

Perguntas frequentes

Quando usar for em vez de while?

O for é conveniente quando o controle da repetição cabe em inicialização, condição e atualização. O while é útil quando a quantidade de repetições depende de uma situação que pode variar.

A variável do for existe fora do laço?

Quando ela é declarada dentro da inicialização, normalmente seu escopo fica limitado ao laço.

Referências bibliográficas

Obras reconhecidas que fundamentam e aprofundam os conceitos apresentados neste artigo.

  1. ALBAHARI, Joseph. C# 12 in a Nutshell . O’Reilly Media, 2023.
  2. TROELSEN, Andrew; JAPIKSE, Phil. Pro C# 10 with .NET 6 . 11. ed. Apress, 2022.

Consulte a bibliografia completa do Código em Sala.