Jump to content

eliminar um livro


suzy

Recommended Posts

:wallbash:viva!

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.