Módulo 3 - Laços sob controle

O laço da sentinela: repetir até o sinal combinado

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026

O que você vai aprender

  • Entender o conceito de sentinela: um valor que sinaliza o fim.
  • Escrever um laço que repete até a sentinela aparecer.
  • Escolher uma sentinela que não se confunda com dados válidos.
  • Tratar a sentinela sem processá-la como se fosse um dado real.

A plaquinha de acabou

No módulo básico você viu o contador controlar um laço: repita 10 vezes. Mas muitas vezes o programa não sabe quantas voltas serão precisas. Quantos números o usuário vai digitar antes de terminar? Quantos produtos o caixa vai passar antes do último? A resposta é imprevisível, e é aí que entra a sentinela: em vez de contar as voltas, o programa repete até encontrar um sinal combinado de que acabou. É a plaquinha caixa fechado, o último cliente que diz é só isso, o zero que o usuário digita para encerrar a lista. O laço não conta; ele espera o sinal.

soma <- 0
escreva("Digite valores; digite 0 para terminar")
leia(valor)
enquanto valor <> 0 faça
  soma <- soma + valor
  leia(valor)
fim
escreva("Total: ", soma)
// o 0 encerra o laço e NÃO entra na soma

O 0 é a sentinela: o laço repete enquanto o valor for diferente de 0. Repare na leitura antes do laço.

Há um detalhe fino nesse código que merece atenção: existem duas leituras, uma antes do laço e outra no fim de cada volta. A primeira leitura garante que a condição do enquanto tenha um valor para testar já na primeira vez. A segunda mantém o ciclo: lê o próximo valor bem antes de voltar ao teste. Esse padrão de ler antes, testar, processar e ler de novo evita dois erros comuns: processar a sentinela como se fosse dado e testar uma variável que ainda não recebeu nada. É uma coreografia que vale memorizar.

Escolher uma sentinela que não se confunde com os dados

A escolha da sentinela é onde mora o perigo. Ela precisa ser um valor que jamais apareça como dado legítimo, senão o laço encerra no meio dos dados de verdade. Para somar idades, o zero é uma sentinela ruim, porque um bebê de zero ano é uma idade válida; melhor usar -1, que nunca é uma idade real. Para uma lista de notas de 0 a 10, qualquer número dessa faixa é péssima sentinela; um -1 ou a palavra fim resolvem. A pergunta a fazer sempre é: esse valor de parada poderia, por acaso, ser um dado verdadeiro? Se puder, troque a sentinela.

🎮 Jogo da aula

Essa sentinela é segura?

Decida se cada escolha de sentinela é segura (verdadeiro) ou perigosa (falso) para o dado descrito.

A sentinela não é um dado

O erro mais comum com sentinelas é processá-las por engano. Se o laço soma os valores e depois testa se chegou o zero, o zero entra na soma antes de encerrar, o que ainda dá certo por acaso (somar zero não muda nada), mas em outros casos estraga tudo: uma sentinela -1 somada baguncaria o total, e uma sentinela fim contada como nome incharia a lista. A regra é clara: quando a sentinela aparece, o laço deve encerrar sem tratá-la. O padrão de ler antes de processar, como no código da soma, garante isso: o valor lido é testado pela condição antes de ser usado, então a sentinela é barrada na porta.

Teste rápido

Um programa lê preços até o usuário digitar -1 (sentinela) e soma tudo. Por que a leitura do próximo preço fica no FIM do laço, e não só no começo do programa?

Perguntas frequentes

Quando usar sentinela em vez de contador para controlar o laço?
Use contador quando você sabe de antemão quantas voltas serão (repita 10 vezes). Use sentinela quando a quantidade é imprevisível e quem decide o fim é um sinal (o usuário digita para terminar, o arquivo chega ao fim). Entrada de dados do usuário quase sempre pede sentinela.
Como escolho uma boa sentinela?
Escolha um valor que jamais possa ser um dado legítimo. Para idades, -1; para notas de 0 a 10, um -1 ou a palavra fim; para textos, uma palavra-chave clara. A pergunta-chave é: esse valor de parada poderia, por acaso, ser um dado real? Se puder, ele é uma sentinela perigosa.
Por que preciso ler o valor duas vezes, antes e dentro do laço?
A leitura antes do laço dá o primeiro valor para a condição testar. A leitura no fim de cada volta traz o próximo valor para o teste seguinte. Sem a primeira, a condição testaria uma variável vazia; sem a segunda, o laço somaria o mesmo valor para sempre, virando infinito.
A sentinela entra no resultado?
Não deve. Ela é um sinal de parada, não um dado. No padrão de ler antes e testar, o valor é conferido pela condição antes de ser processado, então a sentinela nunca é somada nem contada. Somar a sentinela por engano é um bug comum, às vezes silencioso quando ela é zero.
Sentinela tem a ver com o comando interromper?
Têm parentesco: dá para escrever um laço que lê valores e, ao detectar a sentinela, usa interromper para sair. As duas técnicas resolvem a mesma necessidade de parar num sinal. A forma com a condição no enquanto costuma ser mais legível, porque a regra de parada fica visível no topo do laço.
E se o usuário digitar a sentinela logo de cara?
O laço não executa nenhuma volta, e isso é correto. Se a soma começa em zero e a primeira leitura já traz a sentinela, a condição do enquanto é falsa de saída e o total sai zero. Nenhum dado foi informado, então nenhum resultado é o resultado certo, sem erro.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.