Prog en C avec listes chainées
£udo
Messages postés
455
Statut
Membre
-
£udo Messages postés 455 Statut Membre -
£udo Messages postés 455 Statut Membre -
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
++