Witam.
- Mam wczytaną listę ocen. Tutaj wszystko działa.
- Chcę stworzyć nową listę, która będzie zawierała imię, nazwisko i sumę punktów wszystkich studentów.
Robię to za pomocą funkcji i przypisuje każdemu wartość 0 ( potem odpowiednio uzupełnię ). Jednak problem jest taki, że lista się tworzy i wyświetla, ale są na niej duplikaty ( powtarzają się Ci sami studenci ).
Kod:
struct Ocena{
char nazwisko[17];
char imie[15];
int ocena;
int punkty;
struct Ocena *next;
}
struct Ocena *head=NULL, *tail=NULL;
struct Student{
char nazwisko[17];
char imie[15];
int sumaPunktow;
struct Student *next;
}
struct Student *headS=NULL, *tailS=NULL;
void UtworzListeStudentow(){
bool byl=false;
struct Ocena *tmp, *ktory=NULL;
struct Student *tmpS=NULL, *tmpS2=NULL;
char nazwisko[17];
char imie[15];
//TWORZY PIERWSZEGO STUDENTA
strcpy(nazwisko, head->nazwisko);
strcpy(imie, head->imie);
tmpS=(struct Student*)malloc(sizeof(struct Student));
strcpy(tmpS->nazwisko, nazwisko);
strcpy(tmpS->imie, imie);
tmpS->sumaPunktow=0;
headS=tmpS;
tailS=tmpS;
tailS->nast=NULL;
//DODAJE RESZTE STUDENTOW
for(tmp=head; tmp; tmp=tmp->nast){ //przechodze przez liste wszystkich ocen
for(tmpS2=headS; tmpS2; tmpS2=tmpS2->nast){ //przechodze przez liste wszystkich studentow, na poczatku jest tylko jeden
if((strcmp(tmpS2->nazwisko, tmp->nazwisko)==0) && (strcmp(tmpS2->imie, tmp->imie)==0))
byl=true; //to znaczy, że jest już na liście
else{
byl=false; //to znaczy, że nie ma go na liście studentów
ktory=tmp;
}
}
if(!byl){ //jeżeli nie wystąpił to trzeba dodać
tmpS=(struct Student*)malloc(sizeof(struct Student));
strcpy(tmpS->nazwisko, ktory->nazwisko);
strcpy(tmpS->imie, ktory->imie);
tmpS->sumaPunktow=0;
tmpS->nast=NULL;
tailS->nast=tmpS;
tailS=tmpS;
tailS->nast=NULL;
}
}
}
int main(){
//LISTA OCEN JEST WCZYTANA!
struct Student *tmpS=NULL;
UtworzListeStudentow();
for(tmpS=headS; tmpS; tmpS=tmpS->next)
printf("%s %s %d\n", tmpS->nazwisko, tmpS->imie, tmpS->sumaPunktow);
}