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:  
Flasher

C Problema com estrutura de repetição em C

Recommended Posts

Postado (editado)

Pessoal, boa tarde. Estou fazendo um trabalho em C, mas estou tendo alguns problemas :huh:, tenho algumas dúvidas:

 

Primeiro gostaria de saber porque essa estrutura só para quando atinge a primeira condição, ignorando o "ou (||)":

while (w < x || y < z)

 

E segundo, gostaria de saber quando exatamente o while para, se é assim que a condição se torna verdadeira ou se ele termina de rodar o bloco de códigos que está dentro... Além disso, como faço para parar uma estrutura de repetição com break se tiver mais de uma dentro da outra? Ex:

 

while (condição)
	for (...)
		for (...)
			break;

//No caso, o break iria quebrar somente o último FOR, correto?

 

Editado por Flasher

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

O while enquanto pelo menos um dos testes for verdadeiro. Assim, se w < x for verdadeiro, o programa não precisa testar y < z. E somente se os dois testes derem falso, ele para de executar.

Já o break só para o for mais interno. Eu recomendo você usar uma flag (0 pra dizer que é falso e qualquer outro valor para dizer que é verdadeiro) como condição pra parar os laços mais externos;
Será que ajudei?

while(condição(ões)){
	for(...){
		for(...){
			flag = 0;
			break;
		}
		if(!flag){
			flag = 1;
			break;
	}
	if(flag) 
		break;
}

 

Editado por Gabriel Bras
correção do código

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)
9 minutos atrás, Gabriel Bras disse:

O while enquanto pelo menos um dos testes for verdadeiro. Assim, se w < x for verdadeiro, o programa não precisa testar y < z. E somente se os dois testes derem falso, ele para de executar.

Já o break só para o for mais interno. Eu recomendo você usar uma flag (0 pra dizer que é falso e qualquer outro valor para dizer que é verdadeiro) como condição pra parar os laços mais externos;
Será que ajudei?


while(condição(ões)){
	for(...){
		for(...){
			flag = 0;
			break;
		}
		if(!flag){
			flag = 1;
			break;
	}
	if(flag) 
		break;
}

 

 

Boa tarde. Bom, sobre o while, sim, ele teria que parar quando qualquer uma das duas condições forem falsas, né? Mas o problema é que ele só está parando quando a primeira é falsa, e se a segunda condição for falsa antes que a primeira, ele não está parando :mellow: Em outras linguagens não tive esse problema, e estou começando a suspeitar que o problema é no meu PC mesmo, pois não faz sentido... 

Editado por Flasher

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ele só para quando as duas forem falsas. Enquanto uma delas for verdadeira, ele continua rodando.

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, Gabriel Bras disse:

Não, ele só para quando as duas forem falsas. Enquanto uma delas for verdadeira, ele continua rodando.

 

Mesmo usando o "ou (||)" e não "e (&&)"? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Flasher disse:

 

Mesmo usando o "ou (||)" e não "e (&&)"? :huh:

É assim que funciona:


(true || false) = true [continua a executar o laço]
(false || true) = true [continua a executar o laço]
(true || true) = true [continua a executar o laço]
Apenas quando os dois forem falsos, o || vai ser falso
(false || false) = false [para de executar o laço]


Já o (&&) é falso quando pelo menos um dos testes for falso:
(true  && false) = false [para de executar o laço]
(false && true) = false [para de executar o laço]
(false && false) = false [para de executar o laço]
Apenas quando os dois forem verdadeiros, o && vai ser verdadeiro
(true && true) = true [continua a executar o laço]

 

  • 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

×