Prog en C avec listes chainées
£udo
Messages postés
455
Date d'inscription
Statut
Membre
Dernière intervention
-
£udo Messages postés 455 Date d'inscription Statut Membre Dernière intervention -
£udo Messages postés 455 Date d'inscription Statut Membre Dernière intervention -
salut ,
voila un code en C que j' ai fait qui comprend les listes chainées. Il marche mais j' ai pas parfois des erreurs quand je le lance avec borland. Et a enregistre bien dans le fichier.
il y a des choses que je comprends pas comme
ça veut dire quoi, d' ou sort cette forme de saisie (si c'est ça).
Sinon comment je pourrai faire pour suprimer un eleve et aussi pour le modifier. Dois je utiliser de nouvelles structures ?
Merci d' avance
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
voila un code en C que j' ai fait qui comprend les listes chainées. Il marche mais j' ai pas parfois des erreurs quand je le lance avec borland. Et a enregistre bien dans le fichier.
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> FILE *CreaFichier; //fichier où l' on enregistre les données //definition de la structure Seleve struct Seleve { char nom [20]; char prenom[20]; char classe[5]; Seleve *suivant;//suivant un pointeur qui pointe sur la liste }Releve; void menu(); void saisie_pers() { char rep; struct Seleve *nouveau; //nouveau pointe sur la structure struct Seleve *tete; //tete pointe sur la structure struct Seleve * pCourant; //pCourant pointe sur la structure CreaFichier=fopen("CreaFichier","a"); rep='o'; while(rep=='o') { clrscr(); //parcours de la liste chainée jusqu' à la fin if (tete != NULL) { pCourant = tete; while (pCourant->suivant != NULL) { pCourant = pCourant->suivant; }//fin du 2eme while //allocation de memoire pour le nouvel eleve à inserer nouveau=(Seleve*)malloc(sizeof(struct Seleve)); printf ("Entrez le nom de l' eleve:"); scanf ("%s",Releve.nom); printf ("Entrez le prenom de l' eleve:"); scanf ("%s",Releve.prenom); printf ("Entrez la classe de l' eleve:"); scanf ("%s",Releve.classe); //pointeur courant pointe sur le nouvel element pCourant->suivant = nouveau; //le nouvel element pointe sur NULL nouveau->suivant = NULL; //on ecrit sur le fichier fwrite (&Releve,sizeof(Releve),1,CreaFichier); printf("Saisir un nouvel eleve ?"); scanf("%c",&rep); }//fin du if }//fin du 1er while } void voir_pers() { clrscr(); //ouverture du fichier CreaFichier = fopen ("CreaFichier","r"); if (CreaFichier != NULL) { //lecture du fichier fread (&Releve, sizeof(Releve), 1,CreaFichier) ; //tant qu' on arrive pas à la fin du fichier, on le lit while (!feof(CreaFichier)) { printf("\tNom : %s\n", Releve.nom); printf("\tPrenom : %s\n",Releve.prenom); printf("\tClasse : %s\n",Releve.classe); printf("------------------------------------------------------\n"); getch(); fread (&Releve, sizeof(Releve), 1,CreaFichier) ; }//fin du while fclose(CreaFichier); menu(); }//fin du if else { printf("Il n'y a pas d' eleve dans la base...\n\n"); printf ("Appuyer sur une touche pour retourner sur le menu principal..."); getch(); menu(); } } void menu() { clrscr(); int choix; printf("\t\t****************************\n\n\n"); printf("\t\t1. Saisie d' un nouvel eleve\n"); printf("\t\t2. Consultation des eleves enregistres\n\n"); printf("\t\t****************************\n"); scanf("%d",&choix); switch(choix) { case(1): saisie_pers(); break; case(2): voir_pers(); } } void main () { menu(); getch(); }
il y a des choses que je comprends pas comme
pCourant = pCourant->suivant;
ça veut dire quoi, d' ou sort cette forme de saisie (si c'est ça).
Sinon comment je pourrai faire pour suprimer un eleve et aussi pour le modifier. Dois je utiliser de nouvelles structures ?
Merci d' avance
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
A voir également:
- Prog en C avec listes chainées
- Robot prog - Télécharger - Édition & Programmation
- Liste déroulante en cascade - Guide
- Listes déroulantes excel - Guide
- Comment mettre sa liste d'amis en privé sur facebook - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
2 réponses
Salut
pCourant = pCourant->suivant;
C'est le principe des listes chainées.
Ca veut dire que tu passes a l'élement suivant de ta liste chainée.
Pour supprimer un eleve ou modifier sa fiche , t'as pas besoin du tout de créer un autre structure, il faut modifier les parametres de l'éleve concerné.
Crée d' autres méthodes que tu appelera dans ton main a travers ton switch et parcour ta liste chainée afin de trouver la ficher de l'éleve a modifier ou supprimer. Puis ben ... il te reste plus qu'a implémenter la mofication du chainage..
Un conseil, essaie plutôt de tapper le code ou lieu de le pomper ;-)
Bonne chance
++
pCourant = pCourant->suivant;
C'est le principe des listes chainées.
Ca veut dire que tu passes a l'élement suivant de ta liste chainée.
Pour supprimer un eleve ou modifier sa fiche , t'as pas besoin du tout de créer un autre structure, il faut modifier les parametres de l'éleve concerné.
Crée d' autres méthodes que tu appelera dans ton main a travers ton switch et parcour ta liste chainée afin de trouver la ficher de l'éleve a modifier ou supprimer. Puis ben ... il te reste plus qu'a implémenter la mofication du chainage..
Un conseil, essaie plutôt de tapper le code ou lieu de le pomper ;-)
Bonne chance
++