Skocz do zawartości
Smash

[c] Problem Z Kasowaniem Elementu Listy

Rekomendowane odpowiedzi

Witam!

Stworzyłem liste dwukierunkową.

Usuwanie wpisu odbywa za pomoca kursora

http://www.toya.net.pl/~crisu/wpis.jpg

 

Problem jest tylko taki

Zrobiłem zabezpieczenie które sprawia, że uzytkownik nie moze wyjechac kursorem poza liste.

Problem jednak jest w momencie gdy ktoś bedzie próbował sie "przebić' za ostatni element a nastepnie sprobuje usunac element np 2. Nastepuje tzn wysyp programu

 

data *wypisz_usuwaj(struct data *wsk, struct data *pocz, struct data *kon){	data *uwsk;	uwsk=pocz;	char strzalka;	int x=2;	int y=4;	if(pocz==NULL)	{		  gotoxy(20,12);printf("Lista jest pusta!");		  gotoxy(20,15);printf("Nacisni cos......!");		  getch();		  menu();	}	else	{		gotoxy(x,y);printf("->");		int i=0;		wsk=pocz;					do			{			gotoxy(5,2);printf("Imie");gotoxy(27,2);printf("Nazwisko");gotoxy(47,2);printf("Telefon");gotoxy(57,2);printf("Data urodzenia");			gotoxy(5,i+4);printf("%s",wsk->imiona);			gotoxy(27,i+4);printf("%s",wsk->nazwisko);			gotoxy(47,i+4);printf("%d",wsk->telefon);			gotoxy(57,i+4);printf("%d",wsk->urodziny);			wsk=wsk->nastepny;			i++;			}while(wsk!=NULL);		while(strzalka!=27)		{		strzalka=getch();			switch(strzalka)			{			case 80: // down				if((y>i+2))				y=i+2;				y++;				if(uwsk==kon)					uwsk->nastepny=uwsk;				uwsk=uwsk->nastepny;				gotoxy(x,y);				printf("->");				gotoxy(x,y-1);				printf("  ");				break;					case 72: //up				if(y<5)				y=5;				y--;				if(uwsk==pocz) //zabezpieczenie - wyjscie przed liste					uwsk->poprzedni=uwsk;				uwsk=uwsk->poprzedni;				gotoxy(x,y);				printf("->");				gotoxy(x,y+1);				printf("  ");				break;			case 13:				return uwsk;				break;			}		}			}return NULL;}

wywołanie

 

wsk3=wypisz_usuwaj(wsk,poczatek,koniec);	 if(wsk3!=NULL)	   usun(wsk3,&poczatek,&koniec);

wsk3 to wskazni na strukture.

 

kod

http://www.toya.net.pl/~crisu/LISTA2.CPP

 

exe

http://www.toya.net.pl/~crisu/LISTA2.exe

 

Aby obrazowo zobaczyc problem:) Najlepiej pobrac exe, stworzyc 3 wyrazy. ponaciskac troche strzałke w dół a nastepnei usunac element 2 i wyswietlic całosc:)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ja w takich sytuacjach.. uruchamiam program w trybie krokowym i podgladam po kolei zmienne i sprawdzam czy się zgadzaja z tym co powinno tam być... tym sposobem w pare chwil będziesz wiedział kiedy i skad pojawia się błędny wskaźnik...

 

ręcznie jakoś nie lubie rozpatrywać co się dzieje w kodzie.. skoro od tego jest praca krokowa :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...