Witam,
Męczę się już z funkcją usuwania elementów z listy podwieszanej parę godzin i dalej nie działa mi usuwanie elementu który jest n-ty na liście. Gdy chcę usunąć pierwszy wszystko jest ok. Ma ktoś jakiś pomysł co jest nie tak?
typedef struct utwory //typ struktury dla utworow
{
char nazwau[10];
struct utwory *next;
}utwory;
typedef struct plyty //typ struktury dla plyt
{
char nazwap[10];
struct plyty *next;
utwory *utw;
gatunek *gat;
}plyty;
void usunu(plyty **listap)
{
int j=0,i=0;
char ply[10];
char ut[10];
printf("Utwor ktorej plyty chcesz usunac?: ");
scanf("%s",&ply);
plyty *p=*listap;
utwory *e;
utwory *pom;
while(p!=NULL)
{
if(strcmp(ply,p->nazwap)==0)
{
j=1;
break;
}
p=p->next;
}
if(j==1)
{
e=p->utw;
printf("Jaki utwor chcesz usunac?: ");
scanf("%s",&ut);
while(e!=NULL)
{
if(strcmp(ut,e->nazwau)==0);
{
i=1;
break;
}
pom=e;
e=e->next;
}
if(i==1)
{
if(strcmp(p->utw->nazwau,ut)==0)
{
p->utw=p->utw->next;
}
else
{
pom->next=e->next;
free(e);
}
}
else
{
printf("Nie ma takiego utworu. ");
sleep(2);
}
}
else
{
printf("Nie ma takiej plyty. ");
sleep(2);
}
}
Takie rozwiązanie tez nie działa, gdy chciałem usunąć 3 element wyskoczyło okienko program nie odpowiada;/
void usunu(plyty **listap)
{
int j=0,i=0;
char ply[10];
char ut[10];
printf("Utwor ktorej plyty chcesz usunac?: ");
scanf("%s",&ply);
plyty *p=*listap;
utwory *e;
utwory *pom;
while(p!=NULL)
{
if(strcmp(ply,p->nazwap)==0)
{
j=1;
break;
}
p=p->next;
}
if(j==1)
{
e=p->utw;
printf("Jaki utwor chcesz usunac?: ");
scanf("%s",&ut);
while(e!=NULL)
{
if(strcmp(ut,e->nazwau)==0);
{
i=1;
break;
}
pom=e;
e=e->next;
}
if(i==1)
{
if(strcmp(p->utw->nazwau,ut)==0)
{
p->utw=p->utw->next;
}
else
{
pom=p->utw;
while(pom->next!=e)
{
pom=pom->next;
}
pom->next=e->next;
free(e);
}
}
else
{
printf("Nie ma takiego utworu. ");
sleep(2);
}
}
else
{
printf("Nie ma takiej plyty. ");
sleep(2);
}
}