2016-04-01 3 views
1

Dies ist der Datentyp, der ich erklärte:Parameter an qsort() Funktion von <stdlib.h>

struct Element{ 
    char name[21], symbol[4]; 
    double atomicMass; 
    int valence; 
}; 
typedef struct Element myElements; 
myElements data[20]; 

Wenn ich den Namen Mitglieder

data[20] 

geben möchte nur qsort(), wie geht das?

Nicht sicher, ob dies der richtige Weg, um die Funktion zu übergeben würde:

qsort(data->name, 20, sizeof(myElements), compare); 
+0

Möchten Sie "Daten" alphabetisch nach Namen sortieren? –

+0

ja alphabetisch. –

+0

"wie geht das?" - Das machst du nicht und willst es auch nicht. Sie möchten Ihre Daten basierend auf den Namen sortieren. Wenn Sie wirklich nur die Namen an qsort übergeben möchten, müssten Sie sie in ein Array kopieren, das nur aus Namen besteht. –

Antwort

3

Sie müssen nicht nur Mitglied passieren. Der richtige Weg ist, eine Hilfsvergleichsfunktion zu schreiben, die 2 Elemente nach ihrem Namen vergleicht und benutzt.

static int 
cmpElement(const void *p1, const void *p2) 
{ 
    return strcmp(((const Element *) p1)->name, ((const Element *) p2)->name); 
} 

qsort(data, 20, sizeof data[0], cmpElement); 
+0

sollte es nicht sein sizeof (myElements) anstelle von sizeof (Element) –

+0

@SadmanAhmed Sie haben Recht. Es sollte sein. –

+0

@SadmanAhmed Nein, sizeof (struct Element) oder sizeof (data [0]) ist korrekt; sizeof (myElements) ist sehr falsch. Versuchen Sie, die qsort-Dokumentation zu lesen. –

Verwandte Themen