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 :

probleme d'affichage avec les string d'1 liste chainee


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 10
    Points
    10
    Par défaut probleme d'affichage avec les string d'1 liste chainee
    Bonsoir, jai un probleme avec des liste chainee:
    j'arrive a ajouter des maillons, il les affiche bien, sauf que pour les chaine de caracteres il me sort de caractere crypté genre:

    prenom:╠╠╠╠╠╠╠╠ nom:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ note:1.000000

    par contre quand je met direct la chaine de caracteres entre guillemets a l'ajout d'un maillon, la il le met bien:

    nouvelElement->nom = "nicaloas";

    ps: pas de probleme pour les entir ou float..

    voici mes 2 fonctions en question:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    typedef struct element element;
    struct element
    {
    	char *nom;
    	char *prenom;
    	float note;
    	struct element *suivant;
    };
     
    typedef element* llist;
    //------------------------
    llist ajouterQueue(llist liste){
     
    	char nom[10]=0;
    	char prenom[10];
    	float note=0;
     
    	element* nouvelElement;
    	nouvelElement = (struct element *) malloc(sizeof(struct element));
     
    	printf("nom:\n");
    	scanf("%s",nom);
     
    	printf("prenom:\n");
    	scanf("%s",prenom);
     
    	printf("note:\n");
    	scanf("%f",&note);
     
        nouvelElement->nom = nom;
        nouvelElement->prenom = prenom;
        nouvelElement->note = note; 
        nouvelElement->suivant = NULL;
     
     
        if(liste == NULL)
        {
            return nouvelElement;
        }
        else
        {
            element* temp=liste;
            while(temp->suivant != NULL)
            {
                temp = temp->suivant;
            }
            temp->suivant = nouvelElement;
            return liste;
        }
     
    }
     
    //----------------
    void afficherListe(llist liste)
    {
        element* tmp = liste;
        while(tmp != NULL)
        {
            printf("prenom:%s nom:%s note:%f \n", tmp->nom,tmp->prenom,tmp->note);
            tmp = tmp->suivant;
        }
    }

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 339
    Points
    2 339
    Par défaut
    Truc tout bete :

    Le scanf attend une adresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    	printf("nom:\n");
    	scanf("%s",&nom);
     
    	printf("prenom:\n");
    	scanf("%s",&prenom);

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Heu ... Non !!

    Dans ce cas, le tableau de caractères (char nom[10] ou char prenom[10]) est déjà une adresse donc inutile de préfixer avec le symbole &

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	printf("nom:\n");
    	scanf("%s", nom);
     
    	printf("prenom:\n");
    	scanf("%s", prenom);
    C'est correct

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Ton problème se situe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        nouvelElement->nom = nom;
        nouvelElement->prenom = prenom;
        nouvelElement->note = note; 
        nouvelElement->suivant = NULL
    Il faut utiliser strcpy pour recopier les chaines de caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        strcpy(nouvelElement->nom, nom);
        strcpy(nouvelElement->prenom, prenom);
        nouvelElement->note = note; 
        nouvelElement->suivant = NULL
    Au passage, 10 caractères pour un nom ou un prénom, cela me parait un peu juste.

    Si tu tapes un nom de 15 caractères, ton programme part en sucette car il n'y a aucun controle sur la longueur saisie par l'utilisateur.

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 339
    Points
    2 339
    Par défaut
    ...

    Je suis désolé

    J'ai vu "string" dans le titre et je n'ai pas fait attenetion que c'etait du C

    Merci ram-0000

    et encore désolé Ghyslain.


    En penitence ....

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Note qu'il faut modifier également la structure, pour qu'elle ait des tableaux de caractères et non des char*.

    Ou bien, allouer dynamiquement une copie de la chaîne.

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

Discussions similaires

  1. [Dates] Probleme d'affichage avec les checkbox
    Par Maria1505 dans le forum Langage
    Réponses: 8
    Dernier message: 07/12/2006, 15h45
  2. Tout petit probleme avec les string
    Par bixi dans le forum Delphi
    Réponses: 4
    Dernier message: 06/06/2006, 09h46
  3. probleme avec les string sur ITA2 64 bits!
    Par vince3320 dans le forum SL & STL
    Réponses: 5
    Dernier message: 22/08/2005, 19h59
  4. Lecture de fichier : Probleme avec les string
    Par soda_o_rat dans le forum SL & STL
    Réponses: 10
    Dernier message: 11/08/2005, 22h59
  5. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39

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