Witam. Mój problem polega na tym, że nie za bardzo wiem, jak usunąć wybrany element z listy dwukierunkowej, który jest pobierany od użytkownika. W moim przypadku usunąć mam element na podstawie pobranego od użytkownika roku produkcji samochodu.
Mój program wygląda następująco:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
void wypisz_elementy_listy();
void usun_element();
struct pojazd
{
char model[40];
int rok_produkcji;
float pojemnosc_silnika;
struct pojazd *nast;
struct pojazd *poprz;
};
struct pojazd *wsk = NULL, *glowa = NULL ;
int main()
{
FILE *plik ;
printf("Otwieram plik: \n");
if ((plik = fopen("plik1.txt", "r")) == NULL)
{
printf("Nie udalo sie otworzyc pliku\n");
exit(1);
}
printf("\t\tOtwarto!\n");
while(!feof(plik))
{
if(glowa == NULL)
glowa = wsk = (struct pojazd *)malloc(sizeof(struct pojazd));
else
{
wsk->nast = (struct pojazd *)malloc(sizeof(struct pojazd));
wsk = wsk->nast;
}
fscanf(plik, "\t%s %i %f\n", &(wsk->model), &(wsk->rok_produkcji), &(wsk->pojemnosc_silnika));
wsk->nast = NULL;
wsk->poprz = NULL;
}
printf("Zamykam plik: \n");
fclose(plik);
printf("\t\tZamknieto!\n\nWypisuje elementy listy dwukierunkowej: \n");
wypisz_elementy_listy();
usun_element();
wypisz_elementy_listy();
return 0 ;
}
void wypisz_elementy_listy()
{
wsk = glowa;
while(wsk != NULL)
{
printf("%s %i %.2f\n", wsk->model, wsk->rok_produkcji, wsk->pojemnosc_silnika);
wsk=wsk->nast;
}
printf("\n\n");
}
void usun_element()
{
int rok;
struct pojazd *usun;
printf("Podaj rok produkcji samochodu ktory chcesz usunac: ");
scanf("%i", &rok);
if(glowa->rok_produkcji == rok)
{
usun = glowa;
glowa = usun->nast;
}
}
Zapomniałem dodać, że program póki co usuwa tylko pierwszy element.