Pb de sauvegarde

Utilisateur anonyme - 15 mai 2006 à 21:11
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 - 2 juin 2006 à 16:02
Bonjour,
Alors voila, j'ai mon programme sous C/C++ qui fonctionne, je bosse avec un tableau de type, (gestion d'une vidéotheque), et j'aimerais sauvegarder ce qui à deja était saisie !!!
J'ai mon prof qui nous a donné ce code mais je galere un peu a le comprendre, est-il bon ? comment faire avec MON programme ? etc ?

struct eleve
{
int Numero;
char Nom[20];
char Prenom [20];
};


//memorisation
void memorisation(struc eleve tableau[], int nombre)
{
int I;
FILE *pointeureleves;
pointeureleves=fopen("eleves.dat","w");
if(pointeureleves==null)
{
printf'"ouverture du fichier impossible");
}
else
{
for(I=0;i<nombre;i=i+1)
{
if(fwrite(&tableau[I],sizeof(struct eleve), 1, pointeureleves) ==-1)
{
printf("erreur d'ecriture");
}
}
fclose(pointeureleves);
}
}


/chargement
void chargement(struct eleve tableau[], int *nombre)
{
FILE*pointeureleves;
pointeureleves=fopen("eleves.dat", "r");
if (pointeureleves == NULL)
{
print("ouverture du fichier impossible");
}
else
{
fread(&tableau[*nombre],sizeof(struct eleve),1, pointeureleves);
while (! feof(pointeureleves))
{
*nombre = *nombre + 1;
fread (&tableau[*nombre],sizeof(struct eleve),1, pointeureleves);
}
fclose(pointeureleves);
}
}



//pgm principal


void main ()
{
int I, N=0;
struct eleve tab[50];


chargement (tab,&N);
printf("entrer un numero ou 0 pour finir: ");
scanf("%d",&tab[N].numero);
while(tab[N].numero != 0)
{
printf("entrer un nom:");
fflush(stdin);
fgets(tab[N].nom, 50, stdin);
tab[N].nom[strlen(tab[N].nom) -1]='\0';
printf("entrer un prenom:");
fgets(tab[N].Prenom, 50, stdin);
tab[N].prenom[strlen(tab[N].prenom) -1]='\0';
N=N+1;
printf("entrer un numero ou 0 pour finir: ");
scanf("%d",&tab[N].numero);
}
memorisation(tab,N);
}

2 réponses

cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
2 juin 2006 à 16:00
#include <stdlib.h>
#include
<stdio.h>

#include
<conio.h>

#include
<dir.h>

#include
<dos.h>




typedef struct

{

         int Numero;    /* Un champs */

         char Nom[20];

        char Prenom [20];

}eleve;

eleve tab[50];


/* Programme Principal */


void main ()
{
 int i, n= 0;

 chargement (tab,&n);
 printf("entrer un numero ou 0 pour finir: ");
 scanf("%d",&tab[n].numero);
 while(tab[n].numero != 0)
 {
  printf("entrer un nom:");
  fflush(stdin);
  fgets(tab[n].nom, 50, stdin);
  tab[n].nom[strlen(tab[n].nom) -1]='\0';
  printf("entrer un prenom:");
  fgets(tab[n].Prenom, 50, stdin);
  tab[n].prenom[strlen(tab[n].prenom) -1]='\0';
  n++;                 /* n++ est équivalent à   n = n + 1 */
  printf("entrer un numero ou 0 pour finir: ");
  scanf("%d",&tab[n].numero);
 }
 memorisation(tab,n);
}



void memorisation(eleve tableau[50], int nombre)


{



    int i;

    eleve one;

    FILE *fp;

  

     fp =fopen("eleves.dat","w");

     if( fp = = null )

        printf'"ouverture du fichier impossible");

     else

     {

          fread(&nombre, 2, 1, fp);

          for( i 0 ; i < nombre ; i++)        /* i++ est équivalent à i i + 1 */

          {

                  fwrite(&one.Numero, 2, 1, fp);

                  fwrite(&one.Nom, 20, 1, fp);

                  fwrite(&one.Prenom, 20, 1, fp);

          }           

     }

      fclose(fp);

}

void chargement(eleve *tableau[50], int *nombre)


{

         FILE *fp;

         fp = fopen("eleves.dat", "r");

         if ( fp  == NULL )

                print("ouverture du fichier impossible");

         else

         {

              fread(nombre, 2, 1, fp);

              for( i
0 ; i < nombre ; i++)       /* i++ est équivalent à i i + 1 */


              {

             
        fread(&one.Numero, 2, 1, fp);

             
        fread(&one.Nom, 20, 1, fp);

             
        fread(&one.Prenom, 20, 1, fp);


              }           

         }

         fclose(fp);

}

S'il y a certaines parties de mon
code que tu n'a pas compris, n'hésites pas à laisser un message sur le
forum. Je te répondrais.
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
2 juin 2006 à 16:02
erreur dans la fonction chargement : dans la boucle for, après les 3 fread, il faut absolument mettre tab[i] = one;
0
Rejoignez-nous