qsort eines StrukurArrays in einer Struktur
-
Ich habes folgendes Problem:
Ich möchte wie in Titel beschrieben von qsort ein StrukturArry welches sich wiederrum in einer Struktur befindet sortieren lassen.
Ein normales Array von Strukturen zu sortieren habe ich geschaft, aber wollte eben etwas erweitern.../* Struktur Person */ struct strPerson { char cVorname[_MAX_NAME_]; char cNachname[_MAX_NAME_]; }; /* Struktur die Personen aufnimmt (Anzahl 10) */ struct strPersonen { struct strPerson sPerson [_MAX_PERSONEN_]; int iAnzahl; };
Lege nun eine Variable an die vom Typ strPersonen ist
/* Variablendeklaration */ struct strPersonen sPersonen;
Nun der qsort-Aufruf:
/* Strukturen sortieren */ qsort(&sPersonen.sPerson[0], sPersonen.iAnzahl, sizeof(struct strPerson), tauschen_strukturen);
So sieht die tauschen_strukturen aus:
/* Funktion zum Tauschen von Strings */ int tauschen_strukturen (const struct strPerson* sStruktur1, const struct strPerson* sStruktur2) { /* Variablendeklaration */ if (strcmp(sStruktur1->cNachname, sStruktur1->Nachname) < 0) return -1; else if (strcmp(sStruktur1.sPerson->cNachname, sStruktur1.sPerson->Nachname) > 0) return 1; else { if (strcmp(sStruktur1->cVorname, sStruktur2.sPerson->cVorname) < 0) return -1; else if (strcmp(sStruktur1.sPerson->cVorname, sStruktur2.sPerson->cVorname) > 0) return 1; else return 0; } }
Jodoch bringt mit der Compiler beim Erstellen den Fehler das "cNachname" kein Elemtent von ptrPerson wäre.....
Evtl kann mir ja hier jemand weiterhelfen..
Danke!
-
if (strcmp(sStruktur1->cNachname, sStruktur1->Nachname) < 0) return -1;
Entscheide dich mal, ob das
cNachname
oderNachname
heißt.
-
Hi TyRoXx!
Ich schäme ich ja jetzt fast
*rotwert*
Ich suche fast 1 1/2 Std nach dem Fehler und hab ständige die Übergabe von qsort geändert und war echt am verzweifeln.Nach dem ich mich dann endlich entschieden habe cNachname zu verwenden, wie ja in der Struktur deklariert hat es auch auf anhieb funktioniert
Ach ne...../* Variablendeklaration */ if (strcmp(sStruktur1->cNachname, sStruktur1->Nachname) < 0) return -1; else if (strcmp(sStruktur1.sPerson->cNachname, sStruktur1.sPerson->Nachname) > 0) return 1;
musste ich noch zu
/* Variablendeklaration */ if (strcmp(sStruktur1->cNachname, sStruktur2->Nachname) < 0) return -1; else if (strcmp(sStruktur1.sPerson->cNachname, sStruktur2.sPerson->Nachname) > 0) return 1;
ändern.
Weil ein Vergleich von sStruktur1->cNachname mit sStruktur1->cNachname macht wenig SinnNochmals danke für deine schnelle Hilfe!
MfG
Nessie_1980