Ir ao conteúdo
  • Cadastre-se
ilovepic

C reduzir instruções em ciclo for

Recommended Posts

Olá a todos,

 

Tenho a seguinte estrutura de código:


for( int b = 0; b<100; b++){

//executa algo

if(f==4){

//executa algo

b=100;

}

//se f !=4 então continua o ciclo for

}

 

Preciso que quando ele execute a instrução if, o que significa que f é igual a 4, sai do ciclo for. Pois da forma como ele está ele saí do ciclo for porque atribuo 100 à variável b e ele valida na instrução for. Nisto torno o código um pouco mais lento. Dá para tornar mais rápido?

 

Obrigado

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os fatos: 

  1. f == 4 → Verdadeiro;
  2. b ←100;
  3. b ← b + 1;
  4. b < 100 → Falso;

 

São 3 ou + processos antes de finalizar o laço.

for (int b = 0; b  <  100; b++){
     // Executa algo
     if (f  ==  4){
         // Executa algo
         break;}
     // Se f  !=  4: Continua o ciclo for
     }

break; Interrompe o laço imediatamente: O que economizará ~3 processos.

 

Perguntas, dúvidas ou sugestões?

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei no break, mas não sabia como ele funcionava no interior do if utilizado em um laço! Então significa que basta ter um break no interior do loop, independentemente do local onde estiver, que ele vai sempre salta fora do loop. Neste código, isso aplica-se?

 


for( int g = 0; g < 100; g++){

//executa algo

if (hj == "jk") {

//executa algo

} else if (hj == "ol") {

break;

}

}

//executa isto quando o break for atingido ou o ciclo for acabar

 

Quando atingir o break ele não chega mais à instrução for. Salta logo para a linha for do ciclo. É isso?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 minutos atrás, ilovepic disse:

Quando atingir o break ele não chega mais à instrução for

Correto! Quando a laço se encontrar com break é imediatamente interrompido.

 

Só que o exemplo que você postou, especificamente com esses valores nos IFs, isso não vai acontecer: Melhor é você demostrar onde está querendo usar a interrupção com seu código definitivo para que possamos lhe ajudar melhor. 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas a questão que quero esclarecer é mesmo essa. Quando o laço encontrar o break....Se o break estiver no interior do if ele quebra (para de correr o if) mas volta ao loop.

 

Vamos imaginar o seguinte:


while(1){

//executa algo

if(k==3){

//executa algo

break;

}

}

Ele executa o if, quebra o if e continua no loop infinito! É isso!? Ou ele quebra o loop?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim!

1 hora atrás, ilovepic disse:

Ele executa o if, quebra o if e continua no loop infinito! É isso!? Ou ele quebra o loop?

O loop será interrompido, somente se k for igual 3.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, ilovepic disse:

Ele executa o if, quebra o if e continua no loop infinito! É isso!? Ou ele quebra o loop?

 

Como o @AnsiC falou quebra o loop, mas note que apenas 1 loop é quebrado, então se tiver 2 ou mais loops aninhados (um dentro do outro) não vai sair de todos os loops, sai apenas de 1 loop, o loop onde o break foi executado, e o(s) loop(s) mais externo(s) continua(m) rodando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fato importantíssimo esse que ele acabou de dizer. E eu esqueci que cada loop tem um só break; E o que estiver abaixo do break não será executado.

 

Não será executado no seu loop atual, caso haja mais de um loop o mais externo continuará, assim como disse @isrnick .

 
Atualizado:

Tentei fazer um exemplo mais ilustrativo (indentação-próprio):

#include <stdio.h>  /* ~Incluir: printf */
int main (void){
  int meu_contador = 0;
    while (meu_contador  <  50){
           while (1){
                  if (meu_contador  >  10){
                      printf ("break\n");
                      break;}
                  printf ("while::1::meu_contador: %d\n", meu_contador);
                  meu_contador += 1;}
           printf ("while::meu_contador < 50::meu_contador: %d\n", meu_contador);
           meu_contador += 2;}
    printf ("main::meu_contador: %d\n", meu_contador);
  return 0;}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×