Witam, posiadam problem z programem, a mianowicie z funkcją sortującą która wyświetla podwójnie takie same nazwiska z struktury, niestety nie wiem jak zaimplementować aby tak nie robiła.
void sortowanie(struct osoba * lokalna)
{
int ilosc=0, i=0 ,j=0;
lokalna=pierwszy;
while(lokalna!=NULL)
{
if((*lokalna).ID!=NULL)
ilosc++;
lokalna=(*lokalna).nastepny;
}
free(lokalna);
lokalna=pierwszy;
char **wyrazy;
wyrazy =(char**)malloc(ilosc*sizeof(char *)); //przydzielamy pamiec dla tablicy
for(i=0;i<ilosc;i++)
{
wyrazy[i]=(char*)malloc(4*sizeof(char));
wyrazy[i]=(*lokalna).nazwisko;
lokalna=(*lokalna).nastepny;
}
qsort (wyrazy, ilosc, sizeof(char*), cmp);//Sortuje ilosc elementów, o rozmiarze równym sizeof(char*) bajtów każdy,
lokalna=pierwszy; //tablicy wyrazy za pomocą funkcji porównującej cmp
if(lokalna!=NULL)
{
printf("w kolejnosci: nazwisko, imie, ID, miasto.\n \n");
for(i=0;i<ilosc;i++)
{
lokalna=pierwszy;
while(lokalna!=NULL)
{
if(strcmp((*lokalna).nazwisko,wyrazy[i])==0)
{
printf("%s \t %s \t %d \t %s\n",(*lokalna).nazwisko,(*lokalna).imie,(*lokalna).ID,(*lokalna).miasto);
}
lokalna=(*lokalna).nastepny;
}
}
}
else
printf("Baza danych jest pusta!\n");
free(lokalna);
free(wyrazy);
printf("Nacisnij dowolny przycisk aby kontynuowac . . .\n");
scanf("%s",&x);
system("cls");
}
int cmp (const void * a, const void * b) //porównywarka dla qsorta
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp(*ia, *ib);
}
Mogę takze przesłać cały program na priv i dziękuje za każdą pomoc :)