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 manipulation liste chaînée et chaîne de caractères


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut Problème manipulation liste chaînée et chaîne de caractères
    Bonjour,
    j'essaie de réaliser un programme avec un liste simplement chaînée. Je voudrais que l'utilisateur entre un mot et si ce mot a déjà été entré que le compteur attriubé soit incrémenté, sinon que le mot soit ajouté dans la liste.

    Pour le moment, je bloque déjà pour ajouter le mot dans ma liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvelElement->chaine = mot;
    Cette ligne paraît poser problème...


    Désolé pour ce niveau de nullité....

    Voici mon 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    typedef struct element element;
    struct element
    {
        char chaine[80];
        int val;
        struct element *nxt;
    };
     
    typedef element* llist;
     
     
    llist ajouterEnTete(llist liste, char mot);
     
     
    llist ma_liste1 = NULL;
    char mot[80]; 
     
     
    int main(int argc, char **argv)
    {
     
    printf("Please, enter a word: \n");
    fgets(mot,80,stdin);
    printf("You entered the word : %s \n",mot);
     
     
     system("PAUSE");
        return 0;
    }
     
     
     
    llist ajouterEnTete(llist liste, char mot){
        element* nouvelElement = malloc(sizeof(element));
        nouvelElement->chaine = mot;
        //strcpy(nouvelElement->chaine,mot);
        nouvelElement->val = 1;
        nouvelElement->nxt = liste;
        return nouvelElement;
    }
    Merci

    Juju

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Les chaînes de caractères ne se gèrent pas comme ca en C : il est nécessaire de passer par des fonctions de manipulation de chaînes de caractères, comme strcpy (ou strncpy), ...

    Je te conseil de regarder un cours de C, comme par exemple :
    Spécifiques sur les chaînes de caractères :
    http://nicolasj.developpez.com/articles/libc/string/

    Cours plus généraux :
    http://c.developpez.com/cours/
    http://emmanuel-delahaye.developpez.com/

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    Merci pour ces conseils !

    J'ai décommenté la lligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(nouvelElement->chaine,mot);
    mais j'ai un autre probleme de pointer from integer without a cast.

    Pointeur....

  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 juju03 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(nouvelElement->chaine,mot);
    "pointer from integer without a cast."
    nouvelElement->chaine est défini comment ?

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    Je l'ai défini ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct element element;
    struct element
    {
        char chaine[80];
        int val;
        struct element *nxt;
    };
     
    typedef element* llist;
    désolé je n'avais pas recopié le code complet comme au début.

    Merci

  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 juju03 Voir le message
    Je l'ai défini ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct element element;
    struct element
    {
        char chaine[80];
        int val;
        struct element *nxt;
    };
     
    typedef element* llist;
    désolé je n'avais pas recopié le code complet comme au début.

    Merci
    Inutilement complexe, mais correct. En fait, l'erreur est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    llist ajouterEnTete(llist liste, char mot)
    Un paramètre de type 'char' c'est louche (n'existe pas dans la bibliothèque standard du C, par exemple).

    Tu veux probablement passer l'adresse du premier élément d'une chaine, donc :

    char *mot ou char const *mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct element *ajouterEnTete (struct element *liste, char const * mot)

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    merci beaucoup pour votre aide,

    ça marche effectivement.
    Je peux vous demander pouquoi cet astérix devant le nom de la méthode ?

    Merci

    Julien

  8. #8
    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 juju03 Voir le message
    Maintenant j'ai à comprendre
    Inutile de te lancer dans les listes chainées si tu n'as pas compris les pointeurs.

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    C'est vrai que j'éprouve quelques difficultés.
    Mais je suis en Suède pour les études et je dois pas mal apprendre par moi-même.

    Est-il possible de m'expliquer ce que tes changements signifient stp ?

    Merci
    Julien

  10. #10
    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 juju03 Voir le message
    C'est vrai que j'éprouve quelques difficultés.
    Mais je suis en Suède pour les études et je dois pas mal apprendre par moi-même.

    Est-il possible de m'expliquer ce que tes changements signifient stp ?
    Sais-tu ce qu'est une chaine de caractères ?

Discussions similaires

  1. Trier une liste (tableau) de chaînes de caractères
    Par nariman45 dans le forum Pascal
    Réponses: 11
    Dernier message: 20/12/2008, 22h22
  2. Problème d'affichage d'une chaîne de caractères
    Par bob32 dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/06/2008, 22h06
  3. problème de printf d'un chaîne de caractère
    Par beb1982 dans le forum Débuter
    Réponses: 8
    Dernier message: 01/10/2007, 11h45
  4. problème manipulation chaîne des charactères
    Par sash6 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/07/2007, 09h03
  5. Problème de listes chaînées ou de saisie
    Par mathrb dans le forum C
    Réponses: 7
    Dernier message: 12/03/2007, 12h52

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