Chargement d'une liste chainée à partir d'un fichier

Signaler
-
Messages postés
4255
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
21 janvier 2021
-
Bonjour,
jé cré un prog l'un de ses fonctions charger une liste w sauvegarder une liste dans un fichier jé eu un probleme dans la fct du chargement
voici les 2 fction je pveut savoir quel est la menace .

#include <stdio.h>
#include <stdlib.h>
#include "struct.h"

int sauvegarder(liste L)
{
    stock* p;
    p=L.head;
    FILE *fichier;
    fichier = fopen("Fstock.txt", "w+");
    int i;
     if (fichier == NULL)
      {
        printf("Impossible d'ouvrir le fichier");
        exit(0);
      }
      else
      {
        if(p==NULL)
          {
              printf("la liste est vide");
          }

        else

         {
         i=1;
         while(p!=NULL)
          {
           fprintf(fichier,"\n%d",i);
           fprintf(fichier, "\n%ld ",p->identifiant);
           fprintf(fichier, "\n%s ", p->nom);
           fprintf(fichier, "\n%s ", p->type);
           fprintf(fichier, "\n%d ", p->nombre);
           p=p->next;

           i++;
          }
        }
      }

    fclose(fichier);
    printf("%d",i);
    system("echo Sauvgarde en cours\nsleep 0.5\necho .\nsleep 0.5\necho .\nsleep 0.5\necho .\nsleep 0.5");

   return 0;
}


int charger(liste* L)
{
    int i;
    stock* p;
    p=(stock*)malloc(sizeof(stock));
    FILE* fichier = NULL;

    fichier = fopen("Fstock.txt", "r+");

    if (fichier == NULL)
    {
        printf("Impossible d'ouvrir le fichier");
        return EXIT_FAILURE;
    }
    else
    {
        //chargement du contenu du fichier dans les structures
      do
        {
            fscanf(fichier, "\n%ld ",p->identifiant);
            fscanf(fichier, "\n%s ",&p->nom);
            fscanf(fichier, "\n%s ",&p->type);
            fscanf(fichier, "\n%d ",p->nombre);
            fscanf(fichier,"\n%d ",i);
             if(L->head==NULL)
                {
                  L->head=p;
                  L->tail=p;
                  p->next=NULL;
                }
             else
              {
                  p->next=L->head;
                  L->head=p;
              }

        }while(fgetc(fichier) != EOF);


    }
    fclose(fichier);
    return 0;
}

rep svp

2 réponses

Messages postés
14952
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 janvier 2021
93
Hello,
J'ai édité ton message pour rajouter les balises code. Merci d'y penser la prochaine fois ;) (plus d'infos ici)

Edit: je déplace également ta demande dans la section C, car ton code n'est pas du C#

@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...
Messages postés
4255
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
21 janvier 2021
16
salut,

un petit effort d'écriture serai la bienvenue, je suis pas sûr d'avoir bien compris tous les "mots" (je fais des fautes , je me fous qu'il y ai une orthographe et grammaire parfaite, mais un effort d'écriture quand vous avez besoin d'aide est à mon avis un minium).

Bon sinon c'est quoi la question? car "j'ai eu un problème" ne risque pas de nous donner de quoi taffer, et "quelle est la menace" veut dire ? on ne connait pas la définition de ta liste (ou des objets qui la composent, on peu juste les supposer avec les sprintf).

un exemple avec une présentation de l'erreur que tu as rencontré est un minimum si tu souhaite de l'aide.

tout ce que je peux dire c'est qu'il est étrange que tu écrive ton curseur en entête mais qu'à la lecture, tu le prend en dernier ..

naga