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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Points : 2
    Points
    2
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Points : 2
    Points
    2
    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 expérimenté
    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
    Points : 1 421
    Points
    1 421
    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?
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  4. #4
    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 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é)
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    il faut pas caster le malloc ?
    je me trompe peut etre....
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

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

    http://emmanuel-delahaye.developpez....tes.htm#malloc
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre expérimenté
    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
    Points : 1 421
    Points
    1 421
    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
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  8. #8
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    merci pour le lien ^^
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Points : 2
    Points
    2
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Points : 2
    Points
    2
    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 averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    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
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

  12. #12
    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 kamouminator
    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
    C'est écrit dans l'article, non ?
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre expérimenté
    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
    Points : 1 421
    Points
    1 421
    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.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  14. #14
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    C'est écrit dans l'article, non ?
    heu...c'est uniquement a cause des norme / compilateur C++ ??
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Bon en fait bah ok ca a pris en compilation par contre bah maintenant a l éxecution huhu crash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DAHMER $ mc []tp2bis fichier.txt maman papa hello
    Fichier donnee : fichier.txt
    Emetteur : maman
    Destinataire : papa
    Message : hello
    Nom noeud : papa
    %SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual address=0000000000000000, PC=FFFFFFFF8095C4F0, PS=0000001B
    %TRACE-F-TRACEBACK, symbolic stack dump follows
      image    module    routine             line      rel PC           abs PC
                                                0 0000000000000000 FFFFFFFF8095C4F0
     TP2BIS  TP2BIS  main                    2914 0000000000000434 0000000000030434
     TP2BIS  TP2BIS  __main                     0 000000000000006C 000000000003006C
                                                0 FFFFFFFF853C1474 FFFFFFFF853C1474
    Ca vient toujours du strcmp mais ca compile bref je comprends plus xD :p

  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 kamouminator
    heu...c'est uniquement a cause des norme / compilateur C++ ??
    Ben oui. Tu pensais à quoi ?
    Pas de Wi-Fi à la maison : CPL

  17. #17
    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 plagia
    %SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual address=0000000000000000, PC=FFFFFFFF8095C4F0, PS=0000001B
    %TRACE-F-TRACEBACK, symbolic stack dump follows
    image module routine line rel PC abs PC
    0 0000000000000000 FFFFFFFF8095C4F0
    TP2BIS TP2BIS main 2914 0000000000000434 0000000000030434
    TP2BIS TP2BIS __main 0 000000000000006C 000000000003006C
    0 FFFFFFFF853C1474 FFFFFFFF853C1474

    Ca vient toujours du strcmp mais ca compile bref je comprends plus xD :p
    Montre la dernière version de ton code en version compilable et avec les balises code
    Pas de Wi-Fi à la maison : CPL

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    ^^ que signifie balise de code lol ( le vrai débutant inside <= )
    Sinon j veux bien fournir la dernière version mais sous quel format :p je code sous DAHMER actuellement j peux le mettre sous .txt ou ... les bonnes idées sont les bienvenues :p

  19. #19
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ben oui. Tu pensais à quoi ?
    je sais po....

    je sais plus où j'avais lu qu'il fallais absolument caster malloc parcequ'il renvoyais toujours un void...

    PS: dsl plagia de polluer ton post...
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

  20. #20
    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 plagia
    ^^ que signifie balise de code lol ( le vrai débutant inside <= )
    Bah, tu montres à tout le monde que tu n'as pas lu les regles du forum, çaÿ mal.
    Sinon j veux bien fournir la dernière version mais sous quel format :p je code sous DAHMER actuellement j peux le mettre sous .txt ou ... les bonnes idées sont les bienvenues :p
    Un source C, c'est un fichier texte. Tu fais un copié collé dans le corps du message.

    Si il est gros, tu peux le télécharger en pièce jointe.

    P.S. Dahmer, c'est OpenVMS ?
    Pas de Wi-Fi à la maison : CPL

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