Nie rozumiem, w czym mam błąd, bo po skompilowaniu i uruchomieniu, program wypisuje na ekranie po kilka razy to samo i niektóre zdania
są po prostu ze sobą połączone (niektóre niepotrzebne). Czy może ktoś to naprawić?
#include <stdio.h>
#include <stdlib.h>
struct wiadomosc {
int slowo;
struct wiadomosc * poprzednia;
struct wiadomosc * nastepna;
}*pierwsza, *ostatnia;
void stworzyc_Liste(int n);
void drukowac_Liste();
void usunac_Z_Poczatku();
void usunac_Z_Konca();
void usunac_Nta_wiadomosc(int position);
int main()
{
int n, slowo, wybor=1;
pierwsza = NULL;
ostatnia = NULL;
while(wybor != 0)
{
printf("============================================\n");
printf("PROGRAM LISTA DWUKIERUNKOWA\n");
printf("============================================\n");
printf("1. Stworzyc Liste\n");
printf("2. Usunac wiadomosc - z poczatku\n");
printf("3. Usunac wiadomosc - z konca\n");
printf("4. Usunac wiadomosc - N-ta\n");
printf("5. Wydrukowac liste\n");
printf("0. Wyjsc\n");
printf("--------------------------------------------\n");
printf("Wprowadz swoj wybor : ");
scanf("%d", &wybor);
switch(wybor)
{
case 1:
printf("Wprowadz calkowita liczbe wiadomosci w liscie: ");
scanf("%d", &n);
stworzyc_Liste(n);
break;
case 2:
usunac_Z_Poczatku();
break;
case 3:
usunac_Z_Konca();
break;
case 4:
printf("Wprowadz numer porzadkowy wiadomosci, ktora chcesz usunac: ");
scanf("%d", &n);
usunac_Nta_wiadomosc(n);
break;
case 5:
drukowac_Liste();
break;
case 0:
break;
default:
printf("Blad! Niewlasciwy wybor. Prosze wybrac pomiedzy 0-5");
}
printf("\n\n\n\n\n");
}
return 0;
}
void stworzyc_Liste(int n)
{
int i;
char slowo;
struct wiadomosc *nowaWiadomosc;
if(n >= 1)
{
pierwsza = (struct wiadomosc *)malloc(sizeof(struct wiadomosc));
printf("Wprowadz slowo dla pierwszej wiadomosci: ");
scanf("%c", &slowo);
pierwsza->slowo = slowo;
pierwsza->poprzednia = NULL;
pierwsza->nastepna = NULL;
ostatnia = pierwsza;
for(i=2; i<=n; i++)
{
nowaWiadomosc = (struct wiadomosc *)malloc(sizeof(struct wiadomosc));
printf("Wprowadz slowo dla %d wiadomosci: ", i);
scanf("%c", &slowo);
nowaWiadomosc->slowo = slowo;
nowaWiadomosc->poprzednia = ostatnia;
nowaWiadomosc->nastepna = NULL;
ostatnia->nastepna = nowaWiadomosc;
ostatnia = nowaWiadomosc;
}
printf("\nLISTA DWUKIERUNKOWA POMYSLNIE STWORZONA\n");
}
}
void drukowac_Liste()
{
struct wiadomosc * tymczasowa;
int n = 1;
if(pierwsza == NULL)
{
printf("Lista jest pusta.\n");
}
else
{
tymczasowa = pierwsza;
printf("Slowo w liscie:\n");
while(tymczasowa != NULL)
{
printf("SLOWO %d wiadomosci = %c\n", n, tymczasowa->slowo);
n++;
tymczasowa = tymczasowa->nastepna;
}
}
}
void usunac_Z_Poczatku()
{
struct wiadomosc * Usunac;
if(pierwsza == NULL)
{
printf("Niemozliwe usunac. Lista jest pusta.\n");
}
else
{
Usunac = pierwsza;
pierwsza = pierwsza->nastepna;
pierwsza->poprzednia = NULL;
free(Usunac);
printf("Pomyslnie usunieto wiadomosc z poczatku listy.\n");
}
}
void usunac_Z_Konca()
{
struct wiadomosc * Usunac;
if(ostatnia == NULL)
{
printf("Niemozliwe usunac. Lista jest pusta.\n");
}
else
{
Usunac = ostatnia;
ostatnia = ostatnia->poprzednia;
ostatnia->nastepna = NULL;
free(Usunac);
printf("Pomyslnie usunieto wiadomosc z konca listy.\n");
}
}
void usunac_Nta_wiadomosc(int pozycja)
{
struct wiadomosc *obecna;
int i;
obecna = pierwsza;
for(i=1; i<pozycja && obecna!=NULL; i++)
{
obecna = obecna->nastepna;
}
if(pozycja == 1)
{
usunac_Z_Poczatku();
}
else if(obecna == ostatnia)
{
usunac_Z_Konca();
}
else if(obecna != NULL)
{
obecna->poprzednia->nastepna = obecna->nastepna;
obecna->nastepna->poprzednia = obecna->poprzednia;
free(obecna);
printf("Pomyslnie usunieto wiadomosc z %d pozycji.\n", pozycja);
}
else
{
printf("Niewlasciwa pozycja!\n");
}
}