Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gRoOvE

[Resolvido] condição de parada do for

Recommended Posts

não consigo entender o que significa essa condição de parada do for(a primeira), alguém pode me explicar?

int find_free()
{
	int t;
	for(t=0; addr_info[t].name[0] && t<MAX; ++t)
	{
		if(t==MAX)return -1 /*nenhum elemento livre*/
		return t;
	}	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

neste caso o addr_info trata-se de um vector de struct, entao condicao diz que enquanto o valor do campo .nome desta estrutura na posicao t e o proprio valor de t forem menor que MAX que concerteza deve ser uma constante o ciclo continuará a ser executado..

Compartilhar este post


Link para o post
Compartilhar em outros sites

então a condição de parada ali é o valor do elemento .name, correspondende ao valor de t na struct neh? seria isso então?

 

int find_free()
{
	int t;
	for(t=0; (addr_info[t].name[0] && t) <MAX; ++t)
	{
		if(t==MAX)return -1 /*nenhum elemento livre*/
		return t;
	}	
}

mas cara, ta estranho, isso é uma função para achar um lugar livre no vetor de estruturas, o elemento "nome" foi inicializado com o primeiro elemento nul('\0'), nao tem sentido o valor de .name ser limitado ao valor de MAX...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando usamos o valor direto de uma variável no lugar de uma condição o loop é interrompido quando a variável possuir valor 0.

Isso não deixa de ser uma condição.

Teste esse exemplo:

 

i = 10;
while(i){
   printf("%d ",i);
   i--;
}

mas cara, ta estranho, isso é uma função para achar um lugar livre no vetor de estruturas, o elemento "nome" foi inicializado com o primeiro elemento nul('\0'), nao tem sentido o valor de .name ser limitado ao valor de MAX...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tbm entendi da msm forma em q o Ritchie te transmitiw!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

quit, qual a lógica de funcionar da forma que o Ritchie falou? Pois a forma que o Kandrade explicou faz sentido.

 

for(i=0;[b]0[/b] && i <10;i++)
{

}
isto faz sentido perfeitamente, digamos que tivesse uma condição que fizesse mudar o valor do zero em negrito ali, para qq coisa que não fosse zero, aquela condição retornaria verdadeiro(desde que a outa fosse verdadeira tb) e o laço continuaria a iterar

Compartilhar este post


Link para o post
Compartilhar em outros sites

outra coisa, tenho um código aqui...reparem:

 

#include <stdio.h>
#include <string.h>

int main()
{
	char senha[] = "KKKKKKKKKKKKKKKKKK";
	int i;

	for(i=0; i<3 && strcmp(senha,"PATO");++i)
	{
		printf("\nDigite a senha: ");
		scanf("%s",&senha);
	}
	
	if(i==3)
	{
		printf("\nNUMERO DE TENTATIVAS ESGOTADO!!");
		return 0;
	}
	else
	{
		puts("\nSENHA CORRETA, ACESSO LIBERADO!!");
		return 1;
	}
}
se eu digitar a senha correta na ultima interação do laço, como o i vai valer 3, sempre vai retornar que acabou o numero de tentativas...não existe uma forma de ordenar as condições dentro do for? De forma que uma faça sair do laço antes da outra? ou só complementando o if pra corrigir isso msm?

Compartilhar este post


Link para o post
Compartilhar em outros sites
for(i=0; i<3;i++) {
	printf("\nDigite a senha: ");
	scanf("%s",&senha);
   if (strcmp(senha,"PATO")==0) break;
}

 if(i==3)  {
	printf("\nNUMERO DE TENTATIVAS ESGOTADO!!");
	return 0;
 } else  {
	puts("\nSENHA CORRETA, ACESSO LIBERADO!!");
	return 1;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentei inverter a ordem aqui, mas da na mesma, foi a única coisa que me veio a cabeça "/

 

for(i=0; strcmp(senha,"PATO") && i<3;++i)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que colocar o if da senha dentro do for p/ dar break e comparar o i fora ou deixar o strcmp na condicao do for e comparar a senha de novo fora do loop.

Só lembrando que um sistema não compara campos de senha sem que o usuário aperte Enter p/ confirmar a entrada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente, a primeira condição é o valor de uma variável e funciona como o exemplo.

Quando encontrar o valor 0 idependentemente do valor da segunda condição o loop é finalizado e enquanto o valor for diferente de 0 e expressão dependerá do valor da segunda condição.

 

 

isto faz sentido perfeitamente, digamos que tivesse uma condição que fizesse mudar o valor do zero em negrito ali, para qq coisa que não fosse zero, aquela condição retornaria verdadeiro(desde que a outa fosse verdadeira tb) e o laço continuaria a iterar

Compartilhar este post


Link para o post
Compartilhar em outros sites

saquei kandrade, tem que fazer fora msm ou do jeito que a Isis falou, vlw ae :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.