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 :

Tableau de structures en parametre d'une fonction


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Tableau de structures en parametre d'une fonction
    Salut!

    Alors voila mon petit probleme :

    j'ai déclaré une structure, on va dire par exemple :

    struct a {int nombre;};

    Dans le main je déclare un tableau de plusieurs éléments avec cette structure. Ex :

    struct a elements[2];

    Je voudrais ensuite,toujours dans le main, faire appel à une fonction avec comme parametre le tableau de ces structures, ce qui donne :

    fonction (a[2]);

    Ensuite ma fonction est déclarée comme ceci :

    void fonction(struct a elements[2])

    et dans la fonction je fais pas exemple un element[1].nombre.

    et c est la que ca rate, la compilation me fait une erreur "la valeur indice n'est ni un tableau ni un pointeur"

    Je vois pas trop ou se situe l'erreur, surement dans la déclaration de la fonction mais j'ai pas trouvé la solution.

    Quelqu'un a une idée?

  2. #2
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut Re: Tableau de structures en parametre d'une fonction
    Citation Envoyé par -No Comment-
    Salut!

    Alors voila mon petit probleme :

    j'ai déclaré une structure, on va dire par exemple :

    struct a {int nombre;};

    Dans le main je déclare un tableau de plusieurs éléments avec cette structure. Ex :

    struct a elements[2];

    Je voudrais ensuite,toujours dans le main, faire appel à une fonction avec comme parametre le tableau de ces structures, ce qui donne :

    fonction (a[2]);
    L'erreur est la.

    Appelles ta fonction comme ca:

    fonction(elements);

    'elements' est le nom de ton tableau.
    'a' est un type.
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faut passer le tableau elements et non ton a[2] qui n'a aucun sens...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fonction (elements);
    Jc

    PS:

    PPS: Faire attention, tu joues avec des choses que tu ne maîtrises pas, il faudrait revoir tes bases de C avant de te perdre!

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    euh oui désolé en fait c'était pas fonction(a[2]) ca ne voulait effectivement rien dire, mais le fonction(elements); marchent pas non plus, j'ai toujours la même erreur.

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Faut peut être essayer un passage par pointeur si la structure est modifiée par la fonction.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par -No Comment-
    euh oui désolé en fait c'était pas fonction(a[2]) ca ne voulait effectivement rien dire, mais le fonction(elements); marchent pas non plus, j'ai toujours la même erreur.
    Postes le code, ainsi que ce que te raconte ton compilateur.
    Ma boule de cristal est en reparation.
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Alors le code ca va etre un peu long, mais en gros ca donne ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     struct donnees { int numero;}
     
    void fonction(struct donnees nom)
    {
    int nombre;
    nombre=nom[1].numero;
    }
     
    main()
    {
    struct donnees toto[2];
     
    fonction(toto[1]);
    }
    Le code d'erreur de la compilation est :

    Dans la fonction 'fonction':
    erreur: la valeur indicée n'est ni un tableau ni un pointeur

    si je change fonction(toto[2]) en fonction(toto) ca me rajoute :
    dans la fonction main:
    erreur: incompatible type for argument 1 of 'fonction'

  8. #8
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    toto[2] n'appartient pas au tableau.

    toto[0] et toto[1] oui.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Arf exact merci désolé je me suis trompé(je suis un peu fatigué aujourd hui^^) c est changé, enfin de toute facon moi je voudrais envoyer tous les éléments du tableau

  10. #10
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    et il faut remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre=donnees.nom[1].numero;
    par
    la variable c'est "nom"
    son type c'est "struct donnee" (enfin c'est pas vraiment un "type")

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    bon je suis vraiment crevé apparement^^ encore désolé.

    Petite précision : mon programme marche pour une seule structure, mais pas pour un tableau de structures.

  12. #12
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Ce n'est pas:mais Et est mieux.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  13. #13
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    c'est normal, tu définit ta fonction avec une seule structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(struct donnees nom)
    et tu lui en passes une seule:
    si tu veux un tableau, il fau déclarer ta fonction avec un tableau de structures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(struct donnees nom[2])
    et lui passer un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction(toto); //toto EST un tableau

  14. #14
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Avec un tableau de structure en paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct donnees { int numero;};
     
    void fonction(struct donnees nom[2])
    {
    int nombre;
    nombre=nom[0].numero;
    }
     
    int main()
    {
    struct donnees toto[2];
     
    fonction(toto);
    }
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    ah exact merci bien.

  16. #16
    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 Jack_serious
    Citation Envoyé par -No Comment-
    euh oui désolé en fait c'était pas fonction(a[2]) ca ne voulait effectivement rien dire, mais le fonction(elements); marchent pas non plus, j'ai toujours la même erreur.
    Postes le code, ainsi que ce que te raconte ton compilateur.
    Ma boule de cristal est en reparation.
    La mienne, d'origine allemande m'a sorti un message

    Crystal Poule Error.
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    La mienne, d'origine allemande m'a sorti un message

    Crystal Poule Error.
    Regardes dans la FAQ si il n'y a pas un precedent.
    Peut etre est-elle mal configuree ?
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    En fait j ai encore un petit probleme, je voudrais faire passer un tableau de structure dont je ne connais pas a l avance la taille, du coup ca ferait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(struct donnees nom[i])
    i étant la taille qui est définie dans le main, j'arrive pas a trouver la solution, si je mets "int" la compilation refuse, "i" ca met "i undeclared", si je mets que "[]" ca va faire n'importe quoi, bref la je vois pas trop, une idée?

  19. #19
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    effectivement tu ne peux pas faire comme ça.
    si tu ne connais pas la taille avant la compilation, une solution et de ne pas passer un tableau, mais 2 paramètres:
    -un pointeur vers la "case 0" de ton tableau
    -un entier qui indique la taille du tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(struct donnees *ptr_vers_Tableau, int taille)
    et l'entier "taille" correspond à ton "i" que tu voulais mettre

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Ouais je vais peut etre faire comme ca, enfin entre temps mes objectifs ont un peu changer donc je vais voir, mais merci quand meme! c'est sympa.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2012, 15h11
  2. Réponses: 6
    Dernier message: 26/03/2011, 16h12
  3. Réponses: 7
    Dernier message: 08/04/2006, 12h18
  4. Réponses: 12
    Dernier message: 25/01/2006, 07h29
  5. tableau dynamique en parametre d'une fonction
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 27/04/2004, 16h35

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