gRoOvE 0 Denunciar post Postado Agosto 16, 2008 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
Giovanni Ritchie 0 Denunciar post Postado Agosto 17, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 17, 2008 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
Kandrade 7 Denunciar post Postado Agosto 18, 2008 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
quitZAUMMM 18 Denunciar post Postado Agosto 19, 2008 eu tbm entendi da msm forma em q o Ritchie te transmitiw! []'s Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 19, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 19, 2008 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
_Isis_ 202 Denunciar post Postado Agosto 19, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 19, 2008 sim, isso eu sei e quanto ao que eu perguntei? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 20, 2008 Por que você não tenta? Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 20, 2008 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
Kandrade 7 Denunciar post Postado Agosto 20, 2008 O que a Isis fez faz sentido. O break força a saída do laço e o último incremento não é executado. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 20, 2008 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
Kandrade 7 Denunciar post Postado Agosto 20, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 21, 2008 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
Kandrade 7 Denunciar post Postado Agosto 21, 2008 Boa, vou colocar como resolvido. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif 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
gRoOvE 0 Denunciar post Postado Agosto 22, 2008 resolvido ^^ Compartilhar este post Link para o post Compartilhar em outros sites