IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Sauvegarde de données


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut Sauvegarde de données
    Bonjour à tous,
    Je travaille sur un gros code et j'aimerais à une étape donnée sauver toutes mes variables.
    Ce que j'ai programmé s'apparente au petit code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int k,step;
        double value;
        step=2;
        value=100.0;
        FILE *fp=NULL;
        int first_calculous=0;
        void READ();
     
     
        if (first_calculous==0)
        {
     
            READ(step,value,fp);
     
            fprintf(stderr,"starting the calculous with : step=%d value=%e \n", step,value);
        }
     
        for (k=1;k<=10;k++)
        {
            fprintf(stderr,"Increment %d\n",k);
            step++;
            value*=3;;
     
            if (k==4 && first_calculous==1)
            {
                fp=fopen("sauvegarde","w");
                fwrite(&step,sizeof(int),1,fp);
                fwrite(&value,sizeof(double),1,fp);
                fclose (fp);
                //exit(-1);
     
            }
     
        }
        printf("Hello world!\n");
        return 0;
    }
     
    void READ(int step,double value,FILE *fp)
    {
           fp=fopen("sauvegarde","r");
            fread(&step,sizeof(int),1,fp);
            fread(&value,sizeof(double),1,fp);
            fclose (fp);
    return;
    }


    Je fais quelques itérations au niveau d'un premier calcul (first_calculous=1), je sauve les données à une itération donnée, puis je relance un second calcul avec first_calculous=0 ou je suis censée repartir des données précédemment sauvées.
    Lorsque je n'utilise pas la fonction READ, tout marche bien, mais lorsque j'introduis READ, tout se passe comme si je n'avais rien sauvé !

    Pouvez vous m'aider SVP ?

    L.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Une fonction travaille sur une copie des valeurs passées en argument. READ() modifie ses variables locales step et value mais laisse inchangées les variables step et value de main().
    On devrait avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void READ(int *step,double *value); // prototype
    int main(void)
    {
     
        int k,step;
        double value;
        step=2;
        value=100.0;
        FILE *fp=NULL;
        int first_calculous=0;
        if (first_calculous==0)
        {
     
            READ(&step,&value); // passer l'adresse des variables à modifier
    ...
    void READ(int *step,double *value) // fp n'a pas à être en argument
    {
        FILE * fp=fopen("sauvegarde","r");
        fread(step,sizeof(int),1,fp);
        fread(value,sizeof(double),1,fp);
        fclose (fp);
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut Bingo !
    OK,
    merci
    en fait j'avais déjà essayé cette solution mais comme j'avais mal initialisé mes pointeurs step et value, ça ne collait pas.

    Auriez vous une idée pour simplifier d'ailleurs l'initialization que j'ai écrite ? Elle me semble assez lourde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void READ(int *step,double *value);
    int main()
    {
        int k,*step;
        int STEP;
        double *value;
        double VALUE;
        STEP=2;
        step=&STEP;
        VALUE=100.0;
        value=&VALUE;
        FILE *fp=NULL;
        int first_calculous=0;
        void READ();
     
     
        if (first_calculous==0)
        {
     
            READ(step,value);
     
            fprintf(stderr,"starting the calculous with : step=%d value=%e \n", *step,*value);
        }
     
        for (k=1;k<=10;k++)
        {
            fprintf(stderr,"Increment %d\n",k);
            *step+=1;
            *value*=3;;
     
            if (k==4 && first_calculous==1)
            {
                fp=fopen("sauvegarde","w");
                fwrite(step,sizeof(int),1,fp);
                fwrite(value,sizeof(double),1,fp);
                fclose (fp);
                //exit(-1);
     
            }
     
        }
        printf("Hello world!\n");
        return 0;
    }
     
    void READ(int *step,double *value)
    {
            FILE *fp=NULL;
           fp=fopen("sauvegarde","r");
            fread(step,sizeof(int),1,fp);
            fread(value,sizeof(double),1,fp);
            fclose (fp);
    return;
    }
    Merci,
    L.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        int k,*step;
        int STEP;
        double *value;
        double VALUE;
        STEP=2;
        step=&STEP;
        VALUE=100.0;
        value=&VALUE;
        FILE *fp=NULL;
        int first_calculous=0;

    Pourquoi se compliquer la vie par des choses inutiles ??

    Je crois que tu n'as pas assimilé grand chose aux notions de pointeurs..

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        int k ;
        int STEP = 2;
        double VALUE=100.0;
        FILE *fp=NULL;
        int first_calculous=0;
    
       if (first_calculous==0)
        {
            READ(&step,&value);
        }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut Réponse
    Merci de la réponse,

    L.

Discussions similaires

  1. [VB.NET] Comment sauvegarder des données ?
    Par Aspic dans le forum VB.NET
    Réponses: 14
    Dernier message: 15/07/2007, 15h47
  2. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36
  3. [debutant][XML] sauvegarde de donnée provenant de textbox
    Par moust dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 28/06/2005, 15h22
  4. sauvegarde des données des tables
    Par tomm dans le forum Bases de données
    Réponses: 18
    Dernier message: 27/04/2004, 21h29
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo