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 :

Manipulation des caractères dans une liste simplement chaînée


Sujet :

C

  1. #1
    Membre confirmé
    Femme Profil pro
    étudiant
    Inscrit en
    Février 2018
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 91
    Par défaut Manipulation des caractères dans une liste simplement chaînée
    bonsoir , j'aimerai bien que vous m'aidez dans un petit problème dans le main j'ai donné des cataractes dans une liste simplement chaînée mais dans l'affichage elle me donne son code ascii [j'ajoute les éléments au début de la liste et même pour la suppression ]
    voici le code et merci d'avance
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #include<stdio.h>
    #include<stdlib.h>
     
    typedef struct maillon
    {
    	char val;
    	struct maillon *suivant;	
    }maillon_t;
     
    void afficher(maillon_t *l)
    {
    	maillon_t *parcourt=l;
     
    	if(l==NULL)
    	{
    		printf("rien a afficher !\n");
    	}
    	else
    	{
     
         	while(parcourt!=NULL)
            	{
    	        	printf("%d\n",parcourt->val);
    	         	parcourt=parcourt->suivant;
            	}
       }
    }
     
    void insererD( maillon_t **l, char e)
    {
    	maillon_t *nouveau_maillon = (maillon_t*)(malloc(sizeof(maillon_t)));
     
    	nouveau_maillon->val=e;
     
    	if(*l==NULL)
    	{
            *l=nouveau_maillon;
    		nouveau_maillon->suivant=NULL;
    	}
    	else
    	{
    	nouveau_maillon->suivant=*l;
    	*l=nouveau_maillon;
    	}
     
    }
     
    int supprimerD(maillon_t **l)
    {
    	int r=-1;
    	maillon_t * parcourt = NULL;
    	if(*l==NULL)
    	{
    	return -1;
    	}
    	else
    	{
    		parcourt = (*l)->suivant;
    		free(*l);
    		*l=parcourt;
    		r=(*l)->val;
    		return r;
    	}
     
    }
     
    int main(void)
    {
         maillon_t *l=NULL;
     
        int n,i;
        char v;
     
        printf("donner le nombre de votre liste :");
        scanf("%d",&n);
     
        for(i=0;i<n;i++)
        {
        	printf("donner votre carractere:");
        	scanf("%c",&v);
        	insererD(&l,v);
     
    	}
    	afficher(l);
     
        return 0;	
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 748
    Par défaut
    C'est une erreur triviale c'est ton format de la fonction printf qui n'est pas le bon ... pourtant tu n'as pas fait d'erreurs pour celui de la saisie

    format de la fonction printf (<- lien cplusplus en anglais)

  3. #3
    Membre confirmé
    Femme Profil pro
    étudiant
    Inscrit en
    Février 2018
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 91
    Par défaut
    Citation Envoyé par foetus Voir le message
    C'est une erreur triviale c'est ton format de la fonction printf qui n'est pas le bon ... pourtant tu n'as pas fait d'erreurs pour celui de la saisie

    format de la fonction printf (<- lien cplusplus en anglais)
    et pour la boucle quand je lui donne deux éléments dans la liste elle m'affiche qu'un élément
    et merci pour la 1er faute je ne l'est pas vue

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par fashi Voir le message
    et pour la boucle quand je lui donne deux éléments dans la liste elle m'affiche qu'un élément
    C'est un souci lié à la saisie du nombre d'éléments et de chaque élément.
    Quand tu entres "3" pour par exemple saisir 3 éléments, tu tapes au clavier '3' + <return>. Ben ce sont alors 2 entités qui sont stockées dans stdin. Ensuite scanf("%d", &n) récupère le '3' mais laisse le <return> qui est, lui, récupéré dans scanf("%c", &v) et stocké dans ta liste (donc déjà un élément de perdu).
    Ensuite la boucle passe à l'élément 2 que tu saisis (exemple 'a') mais tu le valides aussi par <return>. Et rebelote, le 'a' est alors stocké dans le second élément de ta liste et le 3° scanf("%c", &v) va, lui, stocker le <return> dans le 3° élément de ta liste.
    Et si tu regardes bien, il t'affiche peut-être qu'un élément visuel mais il y a plein de lignes vides aussi, qui sont affichées par ces <return> stockés sous forme de '\n' (rajoute du texte dans ton printf() et tu verras ce texte affiché 3 fois).

    Solution immédiate: rajoute getchar() sous chaque scanf() pour éliminer ces <return> et ça fonctionnera. Et plus tard tu apprendras à faire ce qu'on appelle de la "saisie robuste" et t'auras plus de souci de ce genre.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par foetus Voir le message
    C'est une erreur triviale c'est ton format de la fonction printf qui n'est pas le bon ... pourtant tu n'as pas fait d'erreurs pour celui de la saisie

    format de la fonction printf (<- lien cplusplus en anglais)
    En même temps lorsqu’on a un problème de «*cataracte*» il est normal d’avoir des soucis de vision .

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

Discussions similaires

  1. Remplacer des caractères dans une liste de valeurs
    Par filsdepub dans le forum SQL
    Réponses: 4
    Dernier message: 01/10/2018, 14h42
  2. Réponses: 7
    Dernier message: 23/12/2013, 18h19
  3. petite erreur d'implémentation dans une liste simplement chaînée
    Par johnny3 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 26/10/2008, 16h57
  4. Chercher une chaîne de caractères dans une liste
    Par baedal dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/05/2007, 23h42
  5. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40

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