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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: O laço da sentinela: repetir até o sinal combinado.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
A plaquinha de acabou. Sentinela é um valor especial combinado que sinaliza o fim da repetição.
Escolher uma sentinela que não se confunde com os dados. A escolha da sentinela é onde mora o perigo.
A sentinela não é um dado. O erro mais comum com sentinelas é processá-las por engano.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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 somaO 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.