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 :

[Débutant]Structure et listes chainées


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Par défaut [Débutant]Structure et listes chainées
    Bonjour je dois simuler un réseau composé de noeuds ayant au maximum 4 connexions et un nom variable. Le réseau est décrit à partir d'un fichier qu'on doit lire.

    Je définis donc la structure noeud suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct noeud {
            char  *nom;
            struct noeud *noeud_liaison[NOMBRE_LIAISON_MAX];
    }noeud;
    (NOMBRE_LIAISON_MAX = 4 )

    ensuite je lis mon fichier afin de récupérer tous les noeuds existants et les stocker dans un tableau de pointeur de structures comme ca quand j'effectuerai mes liaisons ca sera à l'aide des cases de ce tableau.

    Je définis donc ce tableau comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct noeud *tableau_noeud;
    J'alloue ensuite l'espace nécessaire de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau_noeud=malloc(nombre_lignes_lues*sizeof(struct noeud));
    J'ai donc un espace mémoire vide que je dois remplir avec les noeuds que j'ai trouvé. Pour cela je veux parcourir mon tableau et voir si le nom existe déjà si OUI alors je ne crée pas le noeud car il doit être unique sinon je le stocke dans ce tableau. Et c'est au moment de la comparaison que je n'arrive pas à trouver l'erreur ca compile pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      for(nombre_ligne=0; nombre_ligne < nombre_lignes_lues; nombre_ligne++)
      {
              if (strcmp(nom_noeud,(tableau_noeud[nombre_ligne]).nom) == 0)
             {
                             puts("Noeud pas unique");
                             rangement=0;
             }
       }
    J'ai parcouru tout internet j'ai pas trouvé ou alors je suis passé dessus mais je n'ai pas compris.
    Merci pour vos réponses.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Par défaut Précision
    la variable nom_noeud provient du découpage de la ligne du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      while (fgets(ligne, sizeof ligne,pointeur_fichier),!feof(pointeur_fichier))
      {
            nom_noeud=strtok(ligne," ");
    déclaré comme ceci :
    Merci encore pour les diverses réponses apportées.

  3. #3
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Et c'est au moment de la comparaison que je n'arrive pas à trouver l'erreur ca compile pas.
    et bien?
    quel est le message du compiler?

  4. #4
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    il faut pas caster le malloc ?
    je me trompe peut etre....

  5. #5
    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 kamouminator
    il faut pas caster le malloc ?
    je me trompe peut etre....
    Non.
    Oui.

    http://emmanuel-delahaye.developpez....tes.htm#malloc

  6. #6
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    merci pour le lien ^^

  7. #7
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    je suis assez hors sujet, et j'en suis desolé, mais je n'ai pas d'autre endroit ou te repondre...
    je voulais juste savoir dans quels cas c'est indispensable de caster le malloc

  8. #8
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par kamouminator
    il faut pas caster le malloc ?
    nan, y faut pas.

    while (fgets(ligne, sizeof ligne,pointeur_fichier),!feof(pointeur_fichier))
    mauvaise utilisation de feof !

    http://faq.cprogramming.com/cgi-bin/...&id=1043284351

    ça changeras des liens usuels

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (strcmp(nom_noeud,(&tableau_noeud[nombre_ligne]).nom) == 0)
    .....................................................................^
    %CC-W-PTRMISMATCH, In this statement, the referenced type of the pointer value "&(tableau_noeud[nombre_ligne]).nom" is "pointer to c
    har", which is not compatible with "const char".
    at line number 139
    Voici le message que j'avais en fait la ligne que j'ai mentionné dans ma requête était la bonne à savoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strcmp(nom_noeud,(tableau_noeud[nombre_ligne]).nom) == 0)
    A priori le problème est résolu. Maintenant si vous avez des précisions quant à la logique sur les pointeurs, je suis preneur car c'est assez difficile de maitriser cette notion.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Par défaut
    Je vois que ca répond vite et je vous en remercie :p
    Néanmoins je suis actuellement dans une école d'ingé généraliste dont je tairai le nom :pPp et on aborde plein de langage etc c'est assez compliqué faut qu'on trouve par nous même. ^^
    Donc excusez pour ce mauvais emploi de !feof :p
    Merci encore

  11. #11
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par plagia
    Donc excusez pour ce mauvais emploi de !feof :p
    ça vas, t'as pas encore ton diplome, t'as tué personne

    j'ai eu un prof de C assez mauvais ... je m'en suis sorti (enfin, je vois le bout du tunnel ) grace aux ressources sur le net.
    le site d'emmanuel est un peu "rustique", mais c'est bourré de bons conseils et de liens.

  12. #12
    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 plagia
    Bonjour je dois simuler un réseau composé de noeuds ayant au maximum 4 connexions et un nom variable. Le réseau est décrit à partir d'un fichier qu'on doit lire.
    Comment tu lis le ficher ? OK, vu. Vire moi ce feof() inutile.

    Attention, avec strtok(), tu récupères l'adresse d'une chaine située dans le tableau 'ligne' passé à fgets().

    A chaque ligne, tu récupères une adresse du même genre. Si tu veux que les chaines soient uniques, il faut faire une copie, par exemple avec la fonction POSIX.1 strdup(). (à libérer avec free() quand c'est terminé)

Discussions similaires

  1. structures ou listes chainées polymorphes
    Par tom31 dans le forum C
    Réponses: 1
    Dernier message: 24/03/2008, 11h14
  2. aide pour structure et liste chainée
    Par monsieur77 dans le forum C
    Réponses: 8
    Dernier message: 20/11/2007, 17h25
  3. [Débutant] Pointeur sur liste chainée
    Par HaTnuX dans le forum C
    Réponses: 2
    Dernier message: 02/12/2006, 17h53
  4. [ Débutant ] trier une liste chainée
    Par sablito dans le forum C
    Réponses: 3
    Dernier message: 01/11/2006, 23h27
  5. [débutante] Liste chainée/système expert
    Par zoune dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 14h41

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