Hallo ich ein Programm schreibt, das eine Liste von Studenten verwalten, i eine Liste verwendet, wird jedes Element wie folgt beschrieben:Sortieren in alphabetischer Reihenfolge eine Liste in c
struct student
{
char lastname[50];
char name[50];
char date_of_birth[50];
char height[50];
struct student *next;
};
struct student *root=0; //this is the root node
Dies ist, wie ich Element hinzufügen zur Liste:
void add_element(struct student **root, char lastname[50], char name[50], char date_of_birth[50], char height[50])
{
if(*root == 0)
{
*root = malloc(sizeof(struct student));
strcpy((*root)->lastname,lastname);
strcpy((*root)->name,name);
strcpy((*root)->date_of_birth,date_of_birth);
strcpy((*root)->height,height);
(*root)->next = 0;
}
else
{
add_element(&(*root)->next,lastname,name,date_of_birth,height);
}
}
ich schrieb auch 2 Funktion, ist eine aus einer Datei zum Lesen, die andere ist die Datei zu schreiben, enthält die Datei, die alle Studenten, alles funktioniert, aber ich brauche eine Funktion alle zu sortieren Das Element in alphabetischer Reihenfolge nach Nachnamen, ich habe versucht, einen zu schreiben, aber es funktioniert nicht, es stürzt ständig ab.
habe ich versucht, eine Menge Dinge, und sie hat nicht funktioniert, dies ein Versuch ist, und es funktioniert nicht :-(
mir bitte
void sort(struct student *head)
{
struct student **current;
struct student *tmp;
for(current = &head ; *current !=NULL ; current = (*current)->next)
{
if((*current)->next == NULL)
{
break;
}
switch(strcmp((*current)->lastname,(*current)->next->lastname))
{
case 0:
{
printf("user not valid");
break;
}
case 1:
{
tmp = *current;
*current = (*current)->next;
(*current)->next = tmp;
break;
}
}
}
}
Hmmmm 'char Höhe [50];' -> 50 beinhaltet die Möglichkeit von _very_ hoch Studenten. ;-) – chux
Was ist 'struct alunno'? IAC, empfehlen Sie '* root = malloc (sizeof (struct alunno));' -> '* root = malloc (sizeof * (* root));' und geben Sie _true_ code ein. – chux
Haben Sie die Compiler-Warnungen beachtet, die Sie erhalten? Zum Beispiel: 'current = (* current) -> next' sollte eine Warnung erzeugen, da' current' ein 'student **' ist, während '(* current) -> next' ein' student * 'ist. – kaylum