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 :

Retour de valeurs dans une structure


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut Retour de valeurs dans une structure
    Salut à tous, alors voici mon code :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #include <assert.h>
    #include <myconio.h>
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    struct article
    {
        char code[10];
    	char desc[30];
    	int stock_min;
    	int stock_reel;
    };
     
    struct vente
    {
        int code;
        int vendu;
    };
     
    void lect_vente(struct vente* une_vente, FILE*);
    void rech_article(struct article un_article, struct vente une_vente, FILE*);
    //void modif_stock(struct article un_article, struct vente une vente, FILE*);
     
    int main ()
    {
       FILE* fic_vente;
       FILE* fic_article;
       struct article un_article;
       struct vente une_vente;
       int stock_min, stock_reel ;
     
       fic_vente = fopen("vente.txt", "r");
       assert(fic_vente != NULL);
       fic_article = fopen("article.dat", "r+b");
       assert(fic_article != NULL);
     
       while(!feof(fic_vente))
       {
           lect_vente(&une_vente, fic_vente);
           rech_article(un_article, une_vente, fic_article);
        }
       fclose(fic_vente);
    }
     
    void lect_vente(struct vente* une_vente, FILE* fic_vente)
    {
        char chaine[10];
     
        fgets(chaine, sizeof(une_vente->code), fic_vente);
        une_vente->code = atoi(chaine);
        fgets(chaine, sizeof(une_vente->vendu), fic_vente);
        une_vente->vendu = atoi(chaine);
    }
     
    void rech_article(struct article un_article, struct vente une_vente, FILE* fic_article)
    {
        int nbr_enreg, nbr_octets;
     
        fseek(fic_article, 0, SEEK_END);
        nbr_octets = ftell(fic_article);
        nbr_enreg = (nbr_octets/sizeof(struct article))/2;
        fseek(fic_article, (nbr_octets) - sizeof(struct article)*((nbr_enreg)+1), SEEK_SET);
     
        fread(&un_article, sizeof(struct article), 1, fic_article);
     
        while(atoi(un_article.code) != une_vente.code)
        {
            if(une_vente.code < atoi(un_article.code))
            {
                nbr_enreg = nbr_enreg/2;
                if (nbr_enreg < 1)
                      nbr_enreg = 1;
     
                fseek(fic_article, -sizeof(struct article), SEEK_CUR);
                fseek(fic_article, -sizeof(struct article) * nbr_enreg , SEEK_CUR);
                fread(&un_article, sizeof(struct article), 1, fic_article);
            }
            else
            {
                nbr_enreg = nbr_enreg/ 2;
                if(nbr_enreg<1)
                    nbr_enreg = 1;
     
                fseek(fic_article, -sizeof(struct article), SEEK_CUR);
                fseek(fic_article, sizeof(struct article) * nbr_enreg , SEEK_CUR);
                fread(&un_article, sizeof(struct article), 1, fic_article);
            }
        }
    }
    Mon soucis est que j'aimerais donc retourner les valeurs de ma structure article que je lis dans la fonction rech_article vers le main.
    J'ai bien essayer de modifier le code en passant ma structure par adresse mais rien y fais :-/
    Je vous remercie d'avance pour votre aide, Aoru23

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Sans trop chercher en profondeur pourquoi ne passes-tu pas les pointeurs de un_article et de une_vente à la fonction rech_article(); plutôt qu'une copie de ceux-ci. Je pense que ton problème vient de là.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    j'avais essayé, et j'ai donc modifié la ligne 23 en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void rech_article(struct article* un_article, struct vente une_vente, FILE*);
    la 42 en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rech_article(&un_article, une_vente, fic_article);
    la 57 en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void rech_article(struct article* un_article, struct vente une_vente, FILE* fic_article)
    la 68 en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(atoi(un_article->code) != une_vente.code)
    et la 70 en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(une_vente.code < atoi(un_article->code))
    mais j'ai toujours des soucis, le programme se lance avant de planter au bout de 2-3 secondes

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    En terme de modification il y a aussi l'appel à fread(); dans rech_article(); qu'il faut modifier. J'ai tenté un test chez moi mais comme je ne possède pas les fichiers ventes.txt et article.data le soft s'arrête au premier assert();, ce qui est normal.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    Ha oui effectivement, je viens de faire les modifications et ça fonctionne
    Je te remercie beaucoup pour ton aide, ça faisait des heures que je bloquais sur cette bêtise

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/02/2014, 16h58
  2. Réponses: 4
    Dernier message: 17/02/2011, 16h39
  3. [Débutant] Récupérer les valeurs dans une structure
    Par Kichott dans le forum MATLAB
    Réponses: 6
    Dernier message: 05/08/2009, 08h37
  4. Réponses: 4
    Dernier message: 31/07/2007, 21h52
  5. Afficher les valeurs d'une structure dans une matrice
    Par yabbiyou dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 12h26

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