suzy Posted December 5, 2007 at 11:02 AM Report Share #152411 Posted December 5, 2007 at 11:02 AM viva! tou aqui com uma duvida que sinceramente nao consigo entender o racicionio logico tenho um array de estruturas, mais nomeadamente de livros, que tem uma variavel que é a sua cota. Quero eliminar um livro atraves da sua cota, o codigo dado é este e funciona , mas nao percebo a condição b[ i].cota!=cota. então a cota que o utilizador coloca tem de ser diferente das que estão no array de estruturas?? nao poderia ser assim if(b[ i].cota==cota) ?? sinceramente nao percebo. Existe outro metodo de entendimento melhor?? ? codigo: int elimina(livro *b, int total) { int cota, i; printf("Cota do livro a eliminar: "); scanf("%d", &cota); for(i=0; i<total && b[i].cota != cota; i++) ; if(i==total) { printf("Livro inexistente\n"); return total; }e lse { b[i] = b[total-1]; return total-1; } } Link to comment Share on other sites More sharing options...
suzy Posted December 5, 2007 at 11:36 AM Author Report Share #152415 Posted December 5, 2007 at 11:36 AM tentei fazer por outro metodo e se coloco a idade da 2 posicao , por exemplo 888, ja me da erro pq?? #include<stdio.h> struct susana { int idade; int peso; }; int eliminar (struct susana *ptr, int total){ int i,idade; printf(" introduza a idade \n"); scanf("%d",&idade); for(i=0;i<total;i++){ if(ptr[i].idade==idade){ ptr[i]=ptr[total-1]; return total-1; }else{ printf("livro inexistente\n"); return total; } } } main() { int x,idade; struct susana vet[4]={{45,13},{888,45}}; x=eliminar(vet,2); printf(" %d",x); fflush(stdin); getchar(); } Link to comment Share on other sites More sharing options...
saunde Posted December 5, 2007 at 08:33 PM Report Share #152532 Posted December 5, 2007 at 08:33 PM for(i=0; i<total && b[i].cota != cota; i++) ; Basicamente o que isto faz é percorrer o array enquanto a cota fôr diferente da cota do livro a eliminar, assim que a cota fôr igual ele sai do for , logo a variavel i fica com o indice onde se encontra o livro a eliminar. Espero que tenha sido explicito... Se não percebeste pergunta que tento explicar de outra maneira . Um blog :Sem Cafeína Link to comment Share on other sites More sharing options...
TheDark Posted December 6, 2007 at 03:43 AM Report Share #152600 Posted December 6, 2007 at 03:43 AM tentei fazer por outro metodo e se coloco a idade da 2 posicao , por exemplo 888, ja me da erro pq?? Tens mesmo que começar a fazer debug, estas dúvidas desapareciam num instante! Não percebi que erro te deu. Aqui funcionou tudo bem. Se ao dizeres "erro" queres dizer que não encontrou ninguém com idade 888, a resposta é que só está a ser executada uma iteração do for. Se procurares por 45 vais ver que dá bem. Se procurares por qualquer outro valor, incluindo 888, o for corre a 1ª vez, chega ao if, vê que é diferente, entra no else e retorna. A ideia não está mal, mas tens que retirar as instruções que estão dentro do bloco else e colocá-las após o for. Desaparecido. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now