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..
Mon probleme est :
d'une part, je n'arrive pas a afficher les donnees saisies par l'utilisateur
d'autre part, je n'arrive pas a utiliser ma fonction qui range les noms dans l'ordre alphabetique..
Si quelqu'un a une suggestion..
Merci d'avance..
Voici ce que j'ai fait :
Code: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; }
-----