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 :

initialisation de tableau et structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut initialisation de tableau et structure
    Bonsoir

    Je declare une structure "test" qui comporte un tableau d'entier de 26 case, plus quelques autres parametres.

    Je declare en global un tableau "tab" de quatre de case de type de ma structure.

    Voici mon probleme: y'a t'il un moyen de remplir mon tableau de ma structure du genre tab[0].t[]={1,5,3,...,9}; sans avoir a le faire manuellement ( tab[0].t[0]=1; ...) car j'ai pas mal de donner a rentrer.

    Merci de votre aide, et n'hesiter pas a me demander plus d'info si necessaire

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Non tu ne peux pas le faire.

    Soit tu initialises ton tableau au moment de la déclaration soit tu te le tapes à la main.

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    le probleme, c'est que a l'initialisation je suis pas sur que ca marche puisque c'estune structure que je declare (qui contient donc plusieurs variable) et non un tableau tout simple

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Et alors ?
    Tu peux initialiser le tableau dans l'initialisation de la structure (à moins que tu n'alloues la structure dynamiquement).

    Sinon, tu peux toujours déclarer un tableau (en static const si tu ne l'initialises qu'avec des valeurs constantes connues à la compilation), l'initialiser du même coup puis le moment venu, le copier dans la structure avec memcpy().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par angel46
    le probleme, c'est que a l'initialisation je suis pas sur que ca marche puisque c'estune structure que je declare (qui contient donc plusieurs variable) et non un tableau tout simple
    Quelque chose comme ceci ne te convient pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct {
        int x;
        int tab[2];
    } foo_s;
     
    int main (void)
    {
        foo_s s = { 1, {2, 3} };
        [...]
        return 0;
    }

  6. #6
    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
    Normalement à l'initialisation tu peux le faire :

    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
     
    typedef struct P_Test {
     
       int      tableau[26] ;
       double D ;
       double G ;
       int i ;
     
    } Test ;
     
     
    // Soit tu initialises à des valeurs distrinctes, et il faut tout préciser
     
    struct Test  Tab[4]={{{1,2,3,4,5,6,7,8,9,....},{1.0},{2.0],{1}} ,
                        {{11,12,13,14,15,16.....},{2.0},{3.0],{2}},
                        {{21,22,23,24,25..},{3.0},{4.0],{3}},
                        {{31,32,33,34,35,36...},{4.0},{5.0],{4}}} ;
     
    // Soit tu initialises tout à une certaine valeur (0 en général), et là il y a 2 manières je crois :
     
    //  1
     
    struct Test  Tab[4]={{{0},{0},{0],{0}} ,
                        {{0},{0},{0],{0}},
                        {{0},{0},{0],{0}},
                        {{0},{0},{0],{0}}} ;
     
    // 2 mais je crois que tu peux aussi faire ça :
     
    struct Test  Tab[4]={{0},{0},{0},{0}};

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par souviron34
    Normalement à l'initialisation tu peux le faire :

    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
     
    typedef struct P_Test {
     
       int      tableau[26] ;
       double D ;
       double G ;
       int i ;
     
    } Test ;
     
     
    // Soit tu initialises à des valeurs distrinctes, et il faut tout préciser
     
    struct Test  Tab[4]={{{1,2,3,4,5,6,7,8,9,....},{1.0},{2.0],{1}} ,
                        {{11,12,13,14,15,16.....},{2.0},{3.0],{2}},
                        {{21,22,23,24,25..},{3.0},{4.0],{3}},
                        {{31,32,33,34,35,36...},{4.0},{5.0],{4}}} ;
     
    // Soit tu initialises tout à une certaine valeur (0 en général), et là il y a 2 manières je crois :
     
    //  1
     
    struct Test  Tab[4]={{{0},{0},{0],{0}} ,
                        {{0},{0},{0],{0}},
                        {{0},{0},{0],{0}},
                        {{0},{0},{0],{0}}} ;
     
    // 2 mais je crois que tu peux aussi faire ça :
     
    struct Test  Tab[4]={{0},{0},{0},{0}};

    Voila ce que me dis mon compilo :

    Switching to target: default
    Compiling: main.c
    main.c:15: error: elements of array `Tab' have incomplete type
    main.c:15: error: extra brace group at end of initializer
    main.c:15: error: (near initialization for `Tab[0]')
    main.c:15: error: syntax error before '...' token
    main.c:15: warning: excess elements in struct initializer
    main.c:15: warning: (near initialization for `Tab[0]')
    main.c:15: error: extra brace group at end of initializer
    main.c:15: error: (near initialization for `Tab[0]')
    main.c:15: warning: excess elements in struct initializer
    main.c:15: warning: (near initialization for `Tab[0]')
    main.c:15: error: extra brace group at end of initializer
    main.c:15: error: (near initialization for `Tab[0]')
    main.c:15: error: syntax error before ']' token
    main.c:15: error: extra brace group at end of initializer
    main.c:15: error: (near initialization for `Tab[0]')
    main.c:15: warning: excess elements in struct initializer
    main.c:15: warning: (near initialization for `Tab[0]')
    main.c:16: error: extra brace group at end of initializer
    main.c:16: error: (near initialization for `Tab[0]')
    main.c:16: error: extra brace group at end of initializer
    main.c:16: error: (near initialization for `Tab[0]')
    main.c:16:38: too many decimal points in number
    main.c:16: error: extra brace group at end of initializer
    main.c:16: error: (near initialization for `Tab[0]')
    main.c:16: error: extra brace group at end of initializer
    main.c:16: error: (near initialization for `Tab[0]')
    main.c:16: error: syntax error before ']' token
    main.c:16: error: extra brace group at end of initializer
    main.c:16: error: (near initialization for `Tab[0]')
    main.c:17: error: extra brace group at end of initializer
    main.c:17: error: (near initialization for `Tab[0]')
    main.c:17: error: extra brace group at end of initializer
    main.c:17: error: (near initialization for `Tab[0]')
    main.c:17:35: too many decimal points in number
    main.c:17: error: extra brace group at end of initializer
    main.c:17: error: (near initialization for `Tab[0]')
    main.c:17: error: extra brace group at end of initializer
    main.c:17: error: (near initialization for `Tab[0]')
    main.c:17: error: syntax error before ']' token
    main.c:17: error: extra brace group at end of initializer
    main.c:17: error: (near initialization for `Tab[0]')
    main.c:18: error: extra brace group at end of initializer
    main.c:18: error: (near initialization for `Tab[0]')
    main.c:18: error: extra brace group at end of initializer
    main.c:18: error: (near initialization for `Tab[0]')
    main.c:18:38: too many decimal points in number
    main.c:18: error: extra brace group at end of initializer
    main.c:18: error: (near initialization for `Tab[0]')
    main.c:18: error: extra brace group at end of initializer
    main.c:18: error: (near initialization for `Tab[0]')
    main.c:18: error: syntax error before ']' token
    main.c:18: error: extra brace group at end of initializer
    main.c:18: error: (near initialization for `Tab[0]')
    main.c:18: error: syntax error before ';' token
    main.c:24: error: extra brace group at end of initializer
    main.c:24: error: (near initialization for `Tab[0]')
    Process terminated with status 1 (0 minutes, 1 seconds)
    52 errors, 6 warnings
    C'est la fête

    PS :

  8. #8
    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
    laquelle tu as prise ? c'est sûre que la première elle passe pas puisque j'ai pas tout initialisé.. Mais il me semblait que les 2 autres devaient passer .. Me trompe-je ?

  9. #9
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Test  Tab[4]={{{0},{0},{0],{0}} ,
                        {{0},{0},{0],{0}},
                        {{0},{0},{0],{0}},
                        {{0},{0},{0],{0}}} ;
    C'est la première fois que je vois des ] pour une initialisation c'est fait expres ou c'est une faute de frappe ?

  10. #10
    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
    suis-je bête.... il se fait tard...

    Voici ce qu'il fallait mettre :

    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
     
    /* Soit tu initialises à des valeurs distrinctes, et il faut tout préciser*/
     
    Test  Tab[4]={{{1,2,3,4,5,6,7,8,9,....},1.0,2.0,1} ,
                        {{11,12,13,14,15,16.....},2.0,3.0,2},
                        {{21,22,23,24,25..},3.0,4.0,3},
                        {{31,32,33,34,35,36...},4.0,5.0,4}} ;
     
    /* Soit tu initialises tout à une certaine valeur (0 en général), et là il y a 2 manières je crois :*/
     
    /*  1*/
     
    Test  Tab[4]={{{0},0,0,0} ,
    		     {{0},0,0,0},
    		     {{0},0,0,0},
    		     {{0},0,0,0}} ;
     
     
    /* 2 mais je crois que tu peux aussi faire ça :*/
     
    Test  Tab[4]={0,0,0,0};
    PS : le ']' était une faute de frappe bien sûr...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par angel46
    Voici mon probleme: y'a t'il un moyen de remplir mon tableau de ma structure du genre tab[0].t[]={1,5,3,...,9}; sans avoir a le faire manuellement ( tab[0].t[0]=1; ...) car j'ai pas mal de donner a rentrer.
    C'est possible si tu as un tableau initialisé de référence queque part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* global en lecture seule */
    int const tab_ref[] = {1,2,3};
     
    int main (void)
    {
       int tab[sizeof tab_ref / sizeof *tab_ref];
     
       /* init */
       memcpy (tab, tab_ref, sizeof tab);
     
       return 0;
    }
    J'ai mis int, mais ça peut être n'importe quel type, y compris une structure...

    Si le tableau de référence te gène, tu peux utiser un fichier de données.

Discussions similaires

  1. Initialisation d'un tableau de structures dynamique
    Par mokochan dans le forum Débuter
    Réponses: 4
    Dernier message: 09/09/2013, 18h10
  2. Réponses: 6
    Dernier message: 30/06/2012, 13h17
  3. problème d'initialisation d'un tableau de structure
    Par hamma2 dans le forum Débuter
    Réponses: 1
    Dernier message: 08/03/2010, 19h26
  4. Initialiser un tableau appartenant à une structure
    Par zeeek dans le forum Débuter
    Réponses: 2
    Dernier message: 16/01/2010, 14h01
  5. Réponses: 2
    Dernier message: 12/05/2007, 01h57

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