Effective Loop Management: Nested Loops and Control with Break/Continue
Um tutorial em vídeo gratuito de Tim Buchalka's Learn Programming Academy
Professional Programmers and Teachers - 2.28M students
62 cursos
2.358.383 alunos
Saiba mais sobre o curso completo
C Programming For Beginners - Master the C Language
C Programming will increase career options. Become a better dev in other languages by learning C. Pointers explained
25:36:08 de vídeo sob demanda • Atualizado em Abril 2025
Understand the fundamentals of the C Programming Language
Make yourself more marketable for entry level programming positions
Create your first C Application
Learn one of the most popular, widly used languages in the world
Understand variables and the different data types
Apply for real-time programming positions
Understand the core language that most modern languages are based on
Learn how to write high-quality code
Português [Automático]
Olá e bem-vindo. Nesta palestra, quero falar sobre loops aninhados e controle de loop. Loops aninhados, loops dentro de loops, controle de loop tem a ver com as instruções break e continue. Então, loops aninhados. Há momentos em que você deseja colocar um loop dentro de outro. Faz todo o sentido. Então, por exemplo, você pode querer contar o número de ocupantes em cada casa em uma rua. Portanto, o que você faria é ter um círculo externo onde você pisa de casa em casa. E então, para cada casa em que você estiver, você contará o número de ocupantes. Espero que você possa visualizar ou entender como isso poderia ser um loop aninhado. Novamente, o loop externo para passar por todas as casas. E então, para cada iteração do loop externo em cada casa que encontrar, você entraria na casa e teria um loop para contar todas as pessoas. Portanto, esse é um pequeno caso de uso quando você deseja realmente utilizar um loop aninhado em c. Aqui está um exemplo. Parece que você acha que seria um loop dentro de um loop realmente não muito complicado. Neste exemplo, estamos usando loops for para. Os loops são bons porque podemos inicializar a variável de controle do loop, ter nossa verificação de condição e nossa variável de controle de loop de modificação, tudo em uma linha. Portanto, este loop externo e chame-o de loop interno externo O loop externo é exatamente o que implica. É o laço do lado de fora. E você pode ter muitas, muitas camadas diferentes de aninhamento. Você pode ter muitos loops internos. Neste caso, estamos passando por um loop controlado por contador, estamos começando em um e vamos até o fim para contar. Não sabemos o que conta aqui, não importa. No corpo do loop for, estamos dizendo que soma é igual a 0. Estamos inicializando a soma para o loop interno. E então, dentro do loop interno, vemos outro loop for para ej igual a 1, j é menor que igual a I e mais mais j. Então dizemos soma mais igual a j. Estamos calculando a soma dos inteiros de 1 a I. Então, o que isso está realmente acontecendo é que você está inserindo um número 5. E para a primeira iteração do loop, você está somando 1 2 3 4 e 5. Para a próxima iteração do loop, você está resumindo 2 3 4 5. Para a terceira iteração do loop, você está somando 3 4 5 e assim por diante. Portanto, os loops internos são necessários, especialmente com base no caso de uso, apenas um loop dentro de um loop perfeitamente. Você vai ver bastante. Não se afaste disso. Dependendo do que você precisa fazer e do problema que está tentando resolver, costuma ser bastante usado. E nesse ponto, nem sempre é um loop for dentro de um loop for, você pode ter um loop while dentro de um loop for. Você poderia ter um loop do while dentro de um loop for, não importa. Portanto, neste exemplo, o mesmo exemplo exato, exceto agora dentro do corpo do loop for, temos um loop aninhado, um loop interno chamado usando a palavra-chave while. Portanto, ainda estamos calculando alguns números inteiros de 1 a I. Temos alguma inicialização fora do loop while. Temos uma condição dentro da verificação while e temos nossas somas dentro do corpo do loop while onde somos modificados, essa é a variável de controle do loop que estamos modificando. Então soma mais igual e então estamos modificando a variável de controle de loop com mais mais j. Então, se não modificássemos mais mais j, teríamos um loop infinito para o loop while. Mas está fazendo a mesma saída, está apenas usando um loop while como um loop aninhado em vez do loop for. Portanto, o aninhamento não é realmente diferente de quando você está aninhando qualquer coisa. Você aninhava instruções if, instruções if dentro de instruções if, instruções de loop aninhadas executavam loops dentro de loops. Para fugir do conceito de loops aninhados, vamos falar sobre a instrução continue. Até este ponto, quando falamos sobre loops, sempre executamos o loop várias vezes com base na condição de saída, a expressão booleana avaliada como falsa. No entanto, há momentos em que você deseja especificamente encerrar um loop mais cedo ou deseja continuar na próxima iteração do loop sem fazer nada. No último caso, continuando sem fazer nada, pulando essencialmente, você pode usar a instrução continue para fazer isso. Portanto, a instrução continue no corpo de um loop faz o seguinte. E antes de mais nada, se você quiser iniciar isso, tudo que você precisa fazer é colocar a palavra-chave continue seguida por um ponto-e-vírgula no corpo do loop. Mas o que vai fazer é basicamente pular essa iteração. Portanto, o continue qualquer coisa abaixo de continue não será executado se estiver dentro do corpo do loop. Portanto, continue muitas vezes que queremos estar no topo do loop com base em alguma condição, geralmente é envolvida em uma instrução if. Se isso acontecer em uma situação especial, não quero executar nenhum código no corpo do loop, apenas pule esta iteração e verifique na próxima. E, novamente, é um pouco confuso porque você está pulando uma iteração e está pulando, mas é válido e é uma maneira de fazer várias verificações. Portanto, mesmo que você tenha sua condição de saída de loop dentro de sua expressão booleana, você pode ter outra verificação. E essa verificação não vai pular do loop, mas vai pular uma iteração. Portanto, é usado novamente para o caso em que você deseja pular a iteração. A vantagem disso é que você pode usar continue e isso eliminará muitos aninhamentos. Isso também eliminará muitas instruções if adicionais dentro do seu bloco de loops. Portanto, pode melhorar a legibilidade quando as instruções são muito longas ou você tem aninhamento profundo. Então, se você achar que está fazendo muitos aninhamentos. você pode querer dizer "huh, talvez eu possa usar um continue". Ou se você descobrir que tem muitas instruções if que estão fazendo certas coisas dentro do corpo do loop, talvez você queira continuar. Não use continue se isso complicar em vez de simplificar o código. Não use o continue se não souber o que está fazendo. Aqui está um exemplo de continuar. Neste exemplo, estamos criando um novo enum do tipo day e dizendo que os valores válidos são Segunda Terça, Quarta, Quinta, Sexta, Sábado, Domingo. E então temos um loop for em que inicializamos nosso enum para segunda-feira e dizemos que, desde que o dia seja menor que domingo, essa é uma condição para sair e, então, estamos dizendo mais mais dia. Você pode se perguntar como estamos incrementando um enum? Bem, lembre-se de que um enum nos bastidores é um número inteiro. Então você pode dizer mais mais dia em um enum e isso vai apenas incrementá-lo para o próximo. Lembre-se, segunda-feira é igual a 0, terça-feira é igual a 1, quarta-feira é igual a 2, está tudo na ordem da lista. Tão perfeitamente bem para incrementar enums. Neste loop for, se for quarta-feira, queremos pular. Não queremos fazer nada. Não queremos imprimir. Portanto, dizemos continuar. Se o dia for igual a quarta-feira, continue. Vai pular a linha de impressão. Ele vai voltar ao topo do loop e vai executar a próxima iteração. E então será quinta-feira. Não vai ser igual a quarta-feira, então não vai pular. Vai cair e imprimir não é quarta-feira. Portanto, este é um caso de uso comum, exemplo comum de uso de continue, sintaxe muito fácil de usar, apenas uma palavra-chave simples seguida de ponto-e-vírgula. O outro caso em que você pode querer fazer algo estranho no loop é se quiser sair mais cedo. Portanto, normalmente, depois que o corpo do loop for inserido, um programa executará todas as instruções no corpo do loop e para cada iteração e, em seguida, fará a verificação e saltará para fora. E sabemos como funciona o continue, que está fazendo um salto um pouco diferente. Existe outra instrução que pode alterar a execução de todas as instruções no loop, é chamada de quebra. E isso deve ser familiar, porque usamos a palavra-chave break quando falamos sobre a instrução switch. Lembre-se, quando tínhamos nossos casos, sairíamos dos casos dessa maneira. Bem, você também pode usar a palavra-chave break dentro de um loop. E o que isso fará é simplesmente saltar para fora do loop. Portanto, a instrução break fará com que o programa saia imediatamente do loop, ele está em execução. As instruções no loop são ignoradas e a execução do loop é encerrada. Então você está apenas pulando fora do circuito. Você está executando cedo. Se a instrução break estiver dentro de loops aninhados, ela afetará apenas o loop mais interno que o contém. Você só vai pular do loop em que está. E para fazer isso, você usa a palavra-chave quebra seguida por um ponto e vírgula. Freqüentemente, o intervalo é usado para deixar um loop quando há 2 motivos distintos para sair. Portanto, antes mencionei que você pode ter outro motivo pelo qual deseja pular uma iteração, mas se houver 2 motivos, 2 condições pelas quais você deseja pular de um loop, você pode usar uma pausa. Se você tiver apenas uma condição, será apenas a condição, dentro do próprio loop, dentro dos parênteses do while ou antes do segundo ponto e vírgula no loop for. Break também é usado em instruções switch, como mencionei. Então, eu só queria lembrá-lo disso. Não os confunda. No entanto, eles essencialmente fazem as mesmas coisas. Eles saltam do código. Quebrar uma instrução switch irá pular totalmente dessa instrução switch, quebrar um loop irá pular para fora desse loop. Bem, aqui está um exemplo. Temos um loop while. Estamos imprimindo alguns números inteiros. Estamos lendo alguns números inteiros. Temos um loop while aninhado. Dentro do loop while aninhado, verificamos o que foi inserido. E se for maior que 100, queremos pular para fora desse loop interno. Então nós fazemos. Então, no loop externo, temos que fazer outra verificação. Se for maior que 100, saímos desse loop externo. Se você não tivesse o segundo intervalo, você nunca saltaria do segundo loop externo. Então, neste caso, isso me lembra de um lugar onde você poderia ir. Imagine se você tivesse 5 aninhamento, 5 camadas de aninhamento, loop while dentro de um loop while dentro de loop while dentro de loop while dentro de loop while. Se você apenas usasse break para tentar pular de loops, você teria todas essas instruções if em cada loop para pular. Em vez de fazer todas aquelas instruções if, você pode tentar. O go to saltaria de todos os loops de estado do loop em um único comando. Então, esse é um caso de uso para ir. Mas, neste caso, estamos apenas demonstrando quebras e temos certeza de que você entendeu que está apenas saindo daquele loop em que está por dentro. E, neste caso, estamos quebrando 2 loops. Portanto, estes são os 2 exemplos, as 2 palavras-chave onde você essencialmente não pode repetir o código do que você espera. Portanto, se você vir uma quebra ou continuar no loop, certifique-se de entender o que está acontecendo, porque você pode não estar executando determinado código que acha que será executado. Novamente, geralmente envolto em uma condição if. Portanto, você pode ver as coisas dessa maneira, mas também deseja fornecer bons comentários quando usar break ou continue. Espero que isto ajude. Na próxima aula, faremos um desafio em que seremos capazes de utilizar esses loops e isso demonstrará e ajudará você a aprender tudo sobre os loops while for e break e continue. Obrigada.