Usuwanie elementu ze struktury

0

Cześć,
Muszę napisać bazę danych imitujacą spis płyt CD/DVD, utworzyłem do tego strukturę dynamiczną i porobiłem już takie rzeczy jak dodawanie nowy elementów itp. Napotykam problem przy usuwaniu elementu ze struktury.
Sama struktura wygląda następująco

 struct spis
{
    char nazwa[ROZM];
    char zawartosc[ROZM];
    char rodzaj[5];
    int rozmiar;
    int rok;
    struct spis *nast;

};

typedef struct spis sp;
sp *glowny;
sp *biezacy;
sp *poprz;

Mój pomysł na usuwanie elementu ze struktury wygląda następująco

void usun()

{
    char naz[ROZM];
    int t=1;
    int flaga;
    sp *pom;



    while (t==1)
            {
                flaga=0;
                system("clear");
                printf("Podaj nazwe plyty ktora chcesz usunac\n");
                fgets(naz, ROZM, stdin);

                biezacy=glowny;
                while (biezacy!=NULL)
                {
                    if (strcmp(biezacy->nazwa,naz)==0)
                    {
                        pom=biezacy->nast;
                        biezacy->nast=pom->nast;
                        free(pom);

                        system("clear");
                        printf("Oto baza po usunieciu\n");
                        wypisz();
                        flaga=1;

                    }


               if(flaga==1) break;
                biezacy=biezacy->nast;
                }

                if(flaga==0) printf("\nPlyta o podanej nazwie nie istnieje\n");

    printf("Aby powrocic do wyboru opcji edytowania wybierz 1, w przeciwnym wypadku 2");
    while(scanf("%d",&t)!=1 || t<1 || t>2)
    {
    printf("Bledne dane. Podaj wybór jeszcze raz");
    czysc();
    }
czysc();




}

}

,

Tylko problem jest taki że owa funkcja usuwa wcześniejszy rekord a nie ten o który mi chodzi. Co jest zrobione źle?

0

Odpowiedź jest prosta - wszystko jest źle poczynając od zaprojektowania struktur.

typedef struct dane
  {
   char nazwa[ROZM];
   char zawartosc[ROZM];
   char rodzaj[5];
   int rozmiar;
   int rok;
  } dane;

typedef struct elem
  {
   dane Dane;
   struct elem *nast; 
  } elem;

typedef struct spis
  {
   elem *poczatek,*koniec;
  } spis;

void dodaj(spis *SP,dane *Dane) { ... }
void usun(spis *SP,const char nazwa[])
  {
   elem *prev=0,*tmp=SP->poczatek;
   while(tmp)
     {
      if(!strcmp(nazwa,tmp->Dane.nazwa))
        {
         if(prev) prev->nast=tmp->nast;
         else SP->poczatek=tmp->nast;
         free(tmp);
         break;
        }
      prev=tmp;
      tmp=tmp->nast;
     }
  }

void szukaj(spis *SP,const char nazwa[]) { ... }
void zwolnij(spis *SP) { ... }
void drukuj(spis *SP) { ... }

int main()
  {
   spis SP={0,0};
   ...
   usun(&SP,"Saga zmierzch");
   return 0;
  }
0

Super, tylko ze ja prawie kończyłem robić ten projekt, wiec może jakoś da zrobić to bazując na tym co jest. Struktur uczyłem się sam z książki wiec błędy mogłem popełnić, ale nie chce zaczynać teraz wszystkiego od początku

0

Nie musisz pisać od nowa, wystarczy zaadaptować poprawny kod do swojej mocno porąbanej/zarąbistej (niepotrzebne skreślić) wersji.

0

Ok bez spiny

1 użytkowników online, w tym zalogowanych: 0, gości: 1