Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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?

 

 

Editado por AnsiC
Correção
  • 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

Editado por ilovepic

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;}

 

Editado por AnsiC
Correção código-fonte
  • 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






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

×