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.
- int numero = 1: inicialização. A variável é criada e começa com 1.
- numero <= 5: condição. A repetição continua enquanto ela for verdadeira.
- numero++: atualização. Após cada volta, o valor aumenta em uma unidade.
O que acontece em cada volta?
- A variável
numerorecebe 1. - O programa verifica se 1 é menor ou igual a 5.
- Como a condição é verdadeira, mostra 1.
- Executa
numero++, e o valor passa a 2. - Repete a verificação e continua até mostrar 5.
- Quando o valor chega a 6, a condição fica falsa e o laço termina.
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ável | Papel | Quando muda |
|---|---|---|
numero | Controla qual venda está sendo lida | No iterador do for |
valor | Guarda a venda da repetição atual | Após uma entrada válida |
total | Acumula todas as vendas | Uma vez por repetição |
maiorVenda | Preserva o maior valor observado | Somente quando aparece valor maior |
media | Resume o conjunto | Depois 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.
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.
- ALBAHARI, Joseph. C# 12 in a Nutshell . O’Reilly Media, 2023.
- TROELSEN, Andrew; JAPIKSE, Phil. Pro C# 10 with .NET 6 . 11. ed. Apress, 2022.