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 :

Problème de tableau de structures, étrange


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 42
    Par défaut Problème de tableau de structures, étrange
    Bonsoir,
    J'ai ce 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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main() {
            struct joueur {
                    char pseudo[30];
                    int sid;
                    int score;
            };
            struct joueur tableau[100];
            tableau[80].score = 666;
            int i;
            for(i=0;i<100;i++) {
                    printf("%d\n",tableau[82].score);
            }
            return 0;
    }
    Et ça me renvoie :

    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    -1208283136
    0
    1347584
    3
    -1208135692
    -1208247616
    0
    0
    0
    2049
    0
    1348076
    0
    0
    29
    134513136
    0
    3
    1361668
    320
    1
    1348076
    1355164
    32
    4
    0
    1348076
    0
    -1209591348
    -1208135692
    -1209627508
    -1208244813
    -1078109128
    -1208135692
    0
    -1078109036
    0
    -1208135692
    112
    7
    -1208156158
    -1208135692
    8
    0
    0
    0
    0
    0
    666
    0
    65536
    0
    0
    0
    0
    0
    0
    0
    -1208247496
    134513136
    0
    0
    1
    -1208247496
    0
    0
    1
    134513673
    Alors que ça devrait me renvoyer que des 0 et un 666 pour tableau[80] !

    Merci d'avance, a +

  2. #2
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Je pense que tu devrais déclarer tes structures à l'exterieur du main,
    utiliser typedef pour ta structure joueur, ça te permettrai de manipuler ce nouveau type, et créer un tableau de pointeurs sur tes structures joueur.
    Mais avant de remplir les champs d'une structure, il faut lui allouer de la mémoire puisque tu manipules des pointeurs sur une structure.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 42
    Par défaut
    Ah bah j'ai mis la structure et le tableau hors du main() et ça marche...
    Pour le reste, je n'ai pas très bien compris, je suis vraiment débutant en C.
    Je vais tenter de continuer comme ça, si j'ai un problème je viens pleurer
    Merci a+

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Kalyptus Voir le message
    Ah bah j'ai mis la structure et le tableau hors du main() et ça marche...
    Si u mets le tableau en dehors du main() (et de toutes autres fonctions), ca devient une variable globale qui, elle, est bien initialisée à 0 par défaut.

    Mais, sauf cas particulier, les variables globales sont à éviter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 42
    Par défaut
    Mais sinon, je peux pas simplement tout initaliser à 0 avec une boucle, avant de mettre 666 à tableau[80] ?

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Kalyptus Voir le message
    Mais sinon, je peux pas simplement tout initaliser à 0 avec une boucle, avant de mettre 666 à tableau[80] ?
    c' est bien possible.

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Kalyptus Voir le message
    Mais sinon, je peux pas simplement tout initaliser à 0 avec une boucle, avant de mettre 666 à tableau[80] ?
    Si c'est une solution.

    Il est aussi possible, lors de la déclaration du tableau, d'initialiser des éléments. Sachant qu'en cas d'initialisation partielle, les éléments restant du tableau sont initialisé à "0". Ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct joueur tableau[100] = {{"", 0, 0}};
    devrait fonctionner

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Kalyptus Voir le message
    Alors que ça devrait me renvoyer que des 0 et un 666 pour tableau[80] !
    Non, le programme fournit devrait renvoyer 100 fois la même chose (a savoir le contenu de tableau[82].score puisque tu imprimes à chaque itération cette variable.
    A priori tu voulais probablement imprimer le contenu de tableau[i].score à chaque itération, et je suppose que c'est bien ce qui est fait dans le code original au vu du résultat fournit 'pourquoi avoir recopier à la main le code source alors qu'un copier/coller aurait été plus simple et sans risque).

    Sinon, en C, les variables locales ne sont pas initialisé par défaut.
    Seule la valeur de tableau[80].score est donc connue (car initialisée), les autres éléments du tableau n'étant pas initialisés, ils peuvent valoir n'importe quoi.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 42
    Par défaut
    Ok ok merci, pour mon code, je l'ai bien copié collé (appelle moi Néanderhal) mais une version de test, qui n'affichait que tableau[82], et sans boucle évidemment... J'ai pensé à décommenter la boucle, pas à re-remplacer le 82 par i ^^

    A+

Discussions similaires

  1. [Langage] Problème de tableau de structure
    Par terminator59140 dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2008, 12h16
  2. Problème de tableau dans une structure
    Par zarbiman dans le forum Réseau
    Réponses: 5
    Dernier message: 15/12/2007, 18h21
  3. Problème avec un tableau de structure
    Par Sofute dans le forum C
    Réponses: 10
    Dernier message: 16/10/2007, 15h29
  4. Problème free() : Tableau de structures
    Par bit_o dans le forum C
    Réponses: 11
    Dernier message: 28/04/2007, 15h53
  5. Réponses: 7
    Dernier message: 21/12/2005, 16h44

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