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 :

Test en parcourant une structure chainée...


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut Test en parcourant une structure chainée...
    Bonjour à tous,

    voici mon problème....

    Je fais une structure chainée dont voici le prototype:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct liste_liaisons;
    typedef liste_liaisons*pt_ll;
    struct liste_liaisons {
      char *ville_source;
      int energie;
      bool endommage;
      int type;
      char *ville_desti;
      pt_ll lien;
    };

    Le résultat de l'affichage de cette structure est le suivant:

    Ville source: Skywatch -- Ville destination: Narsis
    Ville source: Sotha -- Ville destination: Sunkeep
    Ville source: Chorrol -- Ville destination: Haven
    Ville source: Alten -- Ville destination: Blackmoor
    Ville source: Bosmora -- Ville destination: Sotha
    Ville source: Blackmoor -- Ville destination: Greenvale
    Ville source: Sunchal -- Ville destination: Longvale
    Ville source: Bosmora -- Ville destination: Thorn
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void afficher_liaisons(pt_ll liais) {
      while(liais){
        cout << "Ville source: " << liais->ville_source << " -- Ville destination: " <<  liais->ville_desti << endl;
         liais = liais->lien;
      }
    }
    Ca, pas de problème, ca marche... Mais en fait, ce que je voudrais, c'est récupérer les villes liées à une ville, passée en paramètre.
    Pour mon exemple, j'aimerais avoir:
    Sotha est relié à Sunkeep
    Sotha est relié à Bosmora

    Voici donc la procédure que j'ai faite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void retourner_liais_villes(pt_ll liais, char *ville) {
     
      while(liais) {
     
         if(liais->ville_source == ville || liais->ville_desti == ville )
           cout << ville << " est relié à " << liais->ville_desti << endl;
     
         if(liais->ville_desti == ville ) cout << ville << " est relié à " << liais->ville_source << endl;
     
        liais = liais->lien;
      }
    }
    Malheureusement ca ne marche pas ! Ca ne m'affiche la première liaison. En l'occurence:
    Sotha est relié à Sunkeep


    Je ne sais pas pourquoi ca ne marche pas....

    Merci de me filer un coup de main !

    Philippe

  2. #2
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    l'operateur == ne fonctionne pas comme tu le pense avec des char* ...
    En l'utilisant, tu testes si les pointeurs pointent vers la meme adresse, donc ça echoue forcement à chaque fois...

    Solution 1 : utilise strcmp
    Solution 2 : utilise des std::string à la place des char* pour benificier (entres autres) de l'operateur ==.

    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  3. #3
    Membre averti Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par superspag
    l'operateur == ne fonctionne pas comme tu le pense avec des char* ...
    En l'utilisant, tu testes si les pointeurs pointent vers la meme adresse, donc ça echoue forcement à chaque fois...

    Solution 1 : utilise strcmp
    Solution 2 : utilise des std::string à la place des char* pour benificier (entres autres) de l'operateur ==.

    Je te conseille la solution 2, qui offre une plus grande souplesse de développement !!

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Je vous remercie, ca marche parfaitement bien !!! Je n'avais pas pensé au strcmp.

    Voila ce qu'il fallait mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if(strcmp(liais->ville_source,ville) == 0) cout << ville << " est relié à " << liais->ville_desti << endl;
    if(strcmp(liais->ville_desti,ville) == 0) cout << ville << " est relié à " << liais->ville_source << endl;
    (J'ai utilisé strcmp et pas l'autre car, je n'ai pas encore vu la seconde...)

    Merci à tous les deux !

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    La seconde, c'est du C++, la première, c'est plutôt du C

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

Discussions similaires

  1. test d'une valeur chaine
    Par phberanger dans le forum VBScript
    Réponses: 2
    Dernier message: 06/12/2007, 12h25
  2. Parcours d'une structure
    Par G3G3 dans le forum C++
    Réponses: 6
    Dernier message: 10/07/2007, 00h30
  3. Réponses: 2
    Dernier message: 30/03/2007, 12h55
  4. Réponses: 2
    Dernier message: 06/12/2006, 13h36
  5. Réponses: 7
    Dernier message: 04/01/2006, 15h34

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