Probleme en listes chainées.

cs_ryuzaki Messages postés 5 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 19 mai 2011 - 26 févr. 2009 à 16:29
cs_ryuzaki Messages postés 5 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 19 mai 2011 - 27 févr. 2009 à 11:41
slt t le monde je suis un débutant en programmation, j"ai un problème d'accomplir mon mini projet en langage c.
je veux justement supprimer le premier élément de la liste, mais je n'arrive pas.
voila  le code, et j'espère quelqu'un de m'aider à trouver la solution........merci d'avance.
  
*******************************************************************
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct list
{   int num;
    char nom[20], prenom[20], filiere[20], niveau[10], date[10];
    struct list *psuivant;
};

//****************************FONCTION AJOUT**********************************

void ajout (list *tete)
    {
    FILE *db;
    list *n ;
    list *pcourant;
db=fopen("etudiant.txt","a+");
    n = (list*)malloc(sizeof (struct list))  ;
    pcourant=tete;
    if (tete!=NULL)
    {
        while (pcourant->psuivant != NULL)
              pcourant = pcourant->psuivant;
    }
    printf("\t\t.Enter le numŠro             : ");
    scanf("%d",&n->num);
    printf("\t\t.Entrer le nom               : ");
    scanf("%s",n->nom ) ;
    printf("\t\t.Entrer le prenom            : ");
    scanf("%s",n->prenom );
    printf("\t\t.Entrer la date de naissance : ");
    scanf("%s",n->date ) ;
    printf("\t\t.Entrer la filiŠre           : ");
    scanf("%s",n->filiere ) ;
    printf("\t\t.Entrer le niveau            : ");
    scanf("%s",n->niveau );
    fprintf(db,"%d\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\n",n->num,n->nom,n->prenom,n->date,n->filiere,n->niveau);
    printf("\t-----------------------------------------------------------------\n");
    pcourant->psuivant=n;
    n->psuivant=NULL;
}
//****************************FONCTION SUPPRESSION***************************

void suppression (list *tete,char c[10])
{
    list *sup, *tmp;
    int s=0;
    sup=tete;
    tmp=tete;
     if (strcmp(sup->psuivant->nom,c)==0)
    {
     tmp=tete->psuivant;
     tete=tete->psuivant;
     tete=tete->psuivant->psuivant;
     free(tmp);
     printf("\t\t Suppression avec succŠs\n\n");

     }
    
     
}

//****************************FONCTION RECHERCHE*****************************

void recherche(list *tete)
{
FILE *db;
int x=0,i;
char nom_recherche[10];
 list *rech;
 rech=tete;
 printf("\t\t-Entrer le nom que vous voulez chercher : ");
 scanf("%s",&nom_recherche);

     while (rech != NULL)
           {
         if (strcmp(rech->nom,nom_recherche)==0)
            {
          printf("\t\t-l'enregistrement est :\n");
          printf("\t\t\t.NumŠro            : %d\n",rech->num);
          printf("\t\t\t.Nom               : %s\n",rech->nom);
          printf("\t\t\t.Pr‚nom            : %s\n",rech->prenom);
          printf("\t\t\t.Date de naissance : %s\n",rech->date);
          printf("\t\t\t.FiliŠr            : %s\n",rech->filiere);
          printf("\t\t\t.Niveau            : %s\n",rech->niveau);
          printf("\n");
          x=1;
                }
        rech=rech->psuivant; 
         }

        
     if (x == 0)
         printf("\t\t l'enregistrement n'existe pas\n\n");

            db=fopen("etudiant.txt","r");
        for(i=0;i==3;i++)
          {
                fscanf(db,"%d%s%s%s%s%s",&rech->num,&rech->nom,&rech->prenom,&rech->date,&rech->filiere,&rech->niveau);

          if(strcmp(rech->nom,nom_recherche)==0)
                   {           printf("\t\t\t.NumŠro            : %d\n",rech->num);
             printf("\t\t\t.Nom               : %s\n",rech->nom);
             printf("\t\t\t.Pr‚nom            : %s\n",rech->prenom);
             printf("\t\t\t.Date de naissance : %s\n",rech->date);
             printf("\t\t\t.FiliŠr            : %s\n",rech->filiere);
             printf("\t\t\t.Niveau            : %s\n",rech->niveau);

            }

      }
      fclose(db);
  }

//****************************FONCTION AFFICHAGE*****************************

void afficher(list *tete)
{
    list *paffiche ;
    paffiche=tete;
    if(tete!=NULL)
    {
    printf("\t---------------------\n");
    while (paffiche != NULL)
    {

          printf("\t* NumŠro            : %d\n ",paffiche->num);
          printf("\t* Nom               : %s\n ",paffiche->nom);
          printf("\t* Pr‚nom            : %s\n ",paffiche->prenom);
          printf("\t* Date de naissance : %s\n ",paffiche->date);
          printf("\t* FiliŠr            : %s\n ",paffiche->filiere);
          printf("\t* Niveau            : %s\n ",paffiche->niveau);
          printf("\t---------------------\n");
                  paffiche = paffiche->psuivant;
    }
    }
}

//****************************MAIN*******************************************

main()
{
clrscr();
FILE *db;
    char c[10];
    int choix ;
    list *tete, *f;
    tete = NULL;

db=fopen("etudiant.txt","a+");
f = (list*)malloc(sizeof (struct list))  ;
    printf("\t\tEnter le numŠro : ");
    scanf("%d",&f->num);
    printf("\t\tEntrer le nom : ");
    scanf("%s",f->nom ) ;
    printf("\t\tEntrer le prenom : ");
    scanf("%s",f->prenom );
    printf("\t\tEntrer la date de naissance : ");
    scanf("%s",f->date ) ;
    printf("\t\tEntrer la filiŠre : ");
    scanf("%s",f->filiere ) ;
    printf("\t\tEntrer le niveau : ");
    scanf("%s",f->niveau );
fprintf(db,"%d\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\n",f->num,f->nom,f->prenom,f->date,f->filiere,f->niveau);
    tete=f ;
    f->psuivant = NULL ;
    do
    {   printf("\t\t\t\t******* Menu ******\n");
    printf("\t\t\t\t** 1-Ajout       **\n") ;
    printf("\t\t\t\t** 2-Suppression **\n") ;
        printf("\t\t\t\t** 3-Affichage   **\n") ;
    printf("\t\t\t\t** 4-Recherche   **\n") ;
    printf("\t\t\t\t** 5-Sortir      **\n") ;
    printf("\t\t\t\t*******************\n");
    printf("\n\t-Taper votre choix : ");
    scanf("%d",&choix) ;
    printf("\n");
        switch(choix)
        {
            case 1:ajout(tete) ;break ;
        case 2:printf("\t\t Entrer le nom que vous voulez supprimer : ");
                   scanf("%s",&c);
                   suppression(tete,c);
                   break ;
        case 3:afficher(tete) ;break ;
        case 4:recherche(tete) ;break ;
       
        }
    }
    while(choix!=5) ;
    getchar();

}

2 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
26 févr. 2009 à 17:41
salut

remplace :

tete=tete->psuivant;
tete=tete->psuivant->psuivant;

par
tete->psuivant=tete->psuivant->psuivant;
0
cs_ryuzaki Messages postés 5 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 19 mai 2011
27 févr. 2009 à 11:41
merci en tout cas..mais le problème n'est pas résolu.
0
Rejoignez-nous