Bonjour,
cela fait pas mal de temps que je suis en train de travailler sur un programme en C, qui doit ranger des eleves (dont le nom, le prenom, la date de naissance et la note sont entrees par l'utilisateur) dans l'ordre alphabetique de leurs noms..
Je pense avoir bien defini la fonction qui range les noms dans l'ordre alphabetique, et celle qui affiche les elements entres par l'utilisateur. Cependant, je n'arrive pas a les utiliser dans ma fonction principale...
Si quelqu'un a une suggestion..
Merci d'avance..

Voici ce que j'ai fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
typedef struct eleve {
	char nom[32];
	char prenom[32];
	int date_de_naissance;
	double  note_finale;
	struct eleve* suivant;
} Eleve;
 
///Fonction lire_eleve
///Fonction qui demande a l'utilisateur les données des eleves qu'il souhaite insérer.
Eleve* lire_eleve(Eleve* el){
	printf("nom?\n");
	scanf("%s",el->nom);
	printf("prenom?\n");
	scanf("%s",el->prenom);
	printf("date de naissance?\n");
	scanf("%d",&el->date_de_naissance);
	printf("note finale?\n");
	scanf("%lf",&el->note_finale);
return el;
}
 
///Fonction imprime_eleve
///Fonction qui imprime le nom, le prenom, la date de naissance et la note finale
void imprime_eleve(Eleve s){
int a=strlen(s.nom);
int b=strlen(s.prenom);
int i;
for(i=0;i<a;i++){printf("%c ",s.nom[i]);}
for(i=0;i<b;i++){printf("%c ",s.prenom[i]);}
printf("%i %d \n",s.date_de_naissance,s.note_finale);
};
 
// Cette fonction insere en tete de la liste l'eleve donne. Tete pointera sur le nouvel  Eleve.
void insertionEnTete(Eleve ** tete, Eleve * eleveAInserer) {
    eleveAInserer->suivant= (*tete);    
    (*tete) = eleveAInserer;}
 
//Insere en queue de liste l'eleve donne    
    void insertionEnQueue(Eleve ** tete, Eleve * eleveAInserer) {
    Eleve * ptr;    
    if (*tete != NULL) {	
              ptr = * tete;	while (ptr->suivant!= NULL)	    
              ptr = ptr->suivant;	ptr->suivant= eleveAInserer;    }
               else	*tete = eleveAInserer; }
 
 
void inserer(Eleve ** tete, Eleve * eleveAInserer) {
    if (*tete == NULL) { 
	*tete = eleveAInserer;
    } else { 
	if (strcmp((*tete)->nom, eleveAInserer->nom) > 0) {  
	    printf("Insertion en tete %s < %s\n", eleveAInserer->nom, (*tete)->nom);
	    insertionEnTete(tete, eleveAInserer);
	} else {
	    Eleve * ptr = *tete;
 
	    while ((ptr->suivant != NULL) && (strcmp(ptr->suivant->nom, eleveAInserer->nom) < 0)) { 
		printf("%s > %s\n", eleveAInserer->nom, ptr->suivant->nom);
		ptr = ptr->suivant;
	    }
	    eleveAInserer->suivant= ptr->suivant;
	    ptr->suivant= eleveAInserer;
	}
    }
} 
 
void imprime_classe(Eleve* tete) {
    Eleve * ptr;
    ptr = tete;
    if (tete == NULL)
	printf("Il n y a pas d'étudiants\n");
    else {
	do {
	    printf("%s \t\t%s \t\t%d \t\t %d\n", ptr->nom, ptr->prenom, ptr->date_de_naissance, ptr->note_finale);
	    ptr = ptr->suivant;
	} while (ptr != NULL);
    }
}
 
 
///Fonction main()
int main(){
    Eleve * tete = NULL;
	Eleve* premier=malloc(sizeof(Eleve));
	premier=lire_eleve(premier);
	int isAnotherStudent=1;
	while(isAnotherStudent==1) 
	{       
		printf("Voudriez-vous continuer la saisie? (oui(1) ou non(0)) \n");
		scanf("%d",&isAnotherStudent);
		if(isAnotherStudent==1)
		{
			premier->suivant= malloc(sizeof(Eleve)); 
			premier->suivant=lire_eleve(premier->suivant);
		} else
		{
		premier->suivant=NULL;
		}
 
	}
       imprime_classe(premier);
      // imprime_classe(classe, compteur);
 
	return 0;
 
}