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

Bibliothèque standard C Discussion :

Probléme structure pointeur fonction


Sujet :

Bibliothèque standard C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Probléme structure pointeur fonction
    Bonjour,
    J'ai un probléme avec un pointeur de structure dans mon programme. Aprés quelques recherches je ne trouve pas de solution a mon probléme :
    Voici mon code simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    my.h
     
    #define nbproduit 50
    #define T
     
    typedef struct produit produit;
    struct produit
    {
    char nom[T];
    float prix;
    };
     
    int bddstruct(produit* prod);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    main.c
     
    int main(void)
    {
    int nbprod;
    produit prod[nbproduit];
     
    nbprod=bddstruct(&prod[nbproduit];
     
    return 0;
    }
    Et ma fonction bddstruc()
    Elle me permet d'aller chercher des données dans 2 fichiers contenant les noms des produits et leurs prix et donc de remplir ma structure.
    Cette fonction me permettra de charger mes structure et de me renvoyer le nombre de produit -> nbprod
    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
     
    int bddstruct(produit* prod)
    {
    /* Je vous passe tous les traitement qui me permettent de transferer le contenu de mes deux fichier dans 2 chaines de caractéres. 
    Ma fonction substring me permet de decouper ma chaine de caractére (nom produit) par le biais de séparateur qui dans le fichier ressemble à ça :
    creme*chocolat*cafe* 
    voici ma boucle qui me permet de remplir ma structure : */
     
    for (j=0;j<nbprod;j++)
    {
    substring(chaineprod, debut, tabindice[j], chainetemp);
    strcpy(prod->nom, chainetemp);
    debut=tabindice[j]+2;
    prod->prix = tabprix[j];
    return nbprod;
    }
    Avant j'utilisé ma structure en variable global et tout marcher correctement, cependant j'aimerai maintenant utiliser des pointeurs vers ma structure et je cafouille dans l'utilisation des pointeurs et de ma structure.

    Je vois pas comment incrémenter mon tableau de structure ?
    Merci pour votre aide

    Excusez moi pour les fautes d'orthographes si il en reste, c'est sur...

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Sincèrement, devant ce code, que dire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int bddstruct(produit* prod)
    {
    /*....*/
    for (j=0;j<nbprod;j++)
    {
    substring(chaineprod, debut, tabindice[j], chainetemp);
    strcpy(prod->nom, chainetemp);
    debut=tabindice[j]+2;
    prod->prix = tabprix[j];
    return nbprod;
    }
    nbprod, chaineprod, debut, tabindice, chainetemp ne sont pas définis et sont (probablement) des globales.
    Comment veux-tu qu'à partir de ce code, on puisse te dire quelque chose de pertinent ?
    Avant j'utilisé ma structure en variable global et tout marcher correctement, cependant j'aimerai maintenant
    ...
    Excusez moi pour les fautes d'orthographes si il en reste, c'est sur...
    c'est sûr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #define T
    ...
    struct produit
    {
    char nom[T];
    float prix;
    };
    Il faudrait donner une "valeur" à T
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    nbprod, chaineprod, debut, tabindice, chainetemp ne sont pas définis et sont (probablement) des globales.
    Comment veux-tu qu'à partir de ce code, on puisse te dire quelque chose de pertinent ?
    J'ai donner une version simplifier de mon code pour ne pas surcharger le post :

    chaineprod, debut, tabindice et chainetemp sont bien déclarer dans mon code original (pas en variable global mais en local dans la fonction bddstruct()) et me permettent juste de découper une chaine de caractére (chaineprod qui contient l'intégralité de mon fichier produit aprés lecture. Exemple de mon fichier produit : creme*chocolat*cafe*) en me servant de la variable debut et tabindice ( tableau des indices des * dans ma chaine de caractére chaineprod) et chainetemp est la chaine qui contiendra mon produit aprés découpage Ex: cafe

    Mon problème ne porte pas sur cette partie, mais plus sur le remplissage de la structure par le biais d'un pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int bddstruct(produit* prod)
    {
    for (j=0;j<nbprod;j++)
    {
    strcpy(prod->nom, chainetemp);
    prod->prix = tabprix[j];
    }
    return nbprod;
    }
    La solution de faciliter était d'utiliser ma structure comme variable global ou je faisait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int bddstruct()
    {
    for (j=0;j<nbprod;j++)
    {
    strcpy(prod[j].nom, chainetemp);
    prod[j]prix = tabprix[j];
    }
    return nbprod;
    }
    Mais le mieux serait d'utiliser un pointeur.
    Et c'est à ce niveau que je bute.

    T contient la taille max de ma chaine de caractére, j'ai oublier de le renseigner dans mon post.

    #define T 20

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    J'ai trouver un moyen bien plus simple pour formuler le problème que je rencontre avec ma structure .
    En prennant pour exemple, le code du tutoriel sur les structures

    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
     
    typedef struct Coordonnees Coordonnees;
    struct Coordonnees
    {
        long x;
        long y;
    };
     
    int main(int argc, char *argv[])
    {
        Coordonnees monPoint;
     
        initialiserCoordonnees(&monPoint);
     
        return 0;
    }
     
     
    void initialiserCoordonnees(Coordonnees* point)
    {
        point->x = 0;
        point->y = 0;
    }
    Ce code porte sur une variable de type structuré "la variable monpoint"

    J'aimerai pour les besoins de mon programme avoir le même exemple mais avec un tableau de la structure monpoint.
    Par un exemple un tableau de structure de taille 10.

  5. #5
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    Citation Envoyé par babouoles
    J'aimerai pour les besoins de mon programme avoir le même exemple mais avec un tableau de la structure monpoint.
    Par un exemple un tableau de structure de taille 10.
    J'ai repris l'exemple que tu as cité avec un tableau de 10 éléments :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define ARRAY_SIZE 10
     
    struct Coordonnees
    {
        long x;
        long y;
    };
     
    typedef struct Coordonnees Coordonnees;
     
    void initialiserCoordonnees(Coordonnees [], size_t );
     
    int main(int argc, char *argv[])
    {
        Coordonnees a_mesPoints[ARRAY_SIZE];
     
        initialiserCoordonnees(a_mesPoints,ARRAY_SIZE);
     
        return 0;
    }
     
     
    void initialiserCoordonnees(Coordonnees a_points[] ,size_t a_size )
    {
        size_t i;
     
        for( i=0 ; i<a_size ; i++ )
        {
            a_points[i].x=0;    
            a_points[i].y=0;    
        }
    }
    Bonne Chance ...
    @++
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup, je vais etudier ça

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Ton code m'a super bien aider pour comprendre comment ça fonctionne.

    Mais peut tu m'en dire plus sur size_t et a_size dans cet exemple ?

    Sur internet j'ai vu :

    size_t est un type standard défini dans <stddef.h>
    alors que ton programme fonctionne sans utiliser cette librairie.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par babouoles Voir le message
    Mais peut tu m'en dire plus sur size_t<...> ?
    http://emmanuel-delahaye.developpez....tes.htm#size_t
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    Le a_size comme 'Array Size' est une simple variable de type size_t ( Pour ce qui est du size_t le lien évoqué par Emmanuel Delahaye explique tout en détail !! )

    le size_t est défini un peu partout ( stdio,stdlib,...)

    @++
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup,
    cela m'a bien aider.

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

Discussions similaires

  1. Problème de pointeur, fonction et tab (encore!)
    Par Joaninha. dans le forum C
    Réponses: 5
    Dernier message: 11/05/2015, 09h13
  2. Fonction, structure, pointeurs et scanf
    Par exhortae dans le forum C
    Réponses: 13
    Dernier message: 27/02/2007, 17h31
  3. Réponses: 11
    Dernier message: 14/10/2006, 21h26
  4. Réponses: 10
    Dernier message: 04/01/2006, 16h57
  5. Structure, pointeur et fonction...
    Par Linaa dans le forum C
    Réponses: 15
    Dernier message: 04/12/2005, 13h12

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