Apret une desallocation il affiche l'élément supprimer...!!
Résolu
informatique_c
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
informatique_c Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
informatique_c Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Apret une desallocation il affiche l'élément supprimer...!!
- Supprimer rond bleu whatsapp - Guide
- Supprimer une page word - Guide
- Supprimer pub youtube - Accueil - Streaming
- Comment supprimer une application préinstallée sur android - Guide
- Supprimer compte instagram - Guide
4 réponses
Bonjour,
Déjà, ton code n'est pas bon au niveau des commentaires
Avant void affichage(), tu as mis un /* que tu ne refermes pas...
Ensuite, il faut être plus précis dans les explications.
Déjà, ton code n'est pas bon au niveau des commentaires
Avant void affichage(), tu as mis un /* que tu ne refermes pas...
Ensuite, il faut être plus précis dans les explications.
Bonjour informatique_c
Faut pas être si impatient, si on ne répond pas c'est qu'on n'est pas dispo ;-).
Alors déjà, les variables globales sont à éviter. Il vaut mieux envoyer les variable en paramètre.
Ensuite, il ne faut pas mettre de & dans les scanf("%s", ...).
Par exemple :
scanf("%s",&q->nom); doit être transformé en
scanf("%s",q->nom);.
Je te laisse corriger tous les scanf("%s", ...).
Et enfin, le gros problème se trouve dans la fonction supprimer().
Tu "supprimes" l'élément courant, mais il faut bien penser à rattacher l'élément d'avant à l'élément d'après. Je te laisse réfléchir sur ce point.
Cdlt,
Faut pas être si impatient, si on ne répond pas c'est qu'on n'est pas dispo ;-).
Alors déjà, les variables globales sont à éviter. Il vaut mieux envoyer les variable en paramètre.
Ensuite, il ne faut pas mettre de & dans les scanf("%s", ...).
Par exemple :
scanf("%s",&q->nom); doit être transformé en
scanf("%s",q->nom);.
Je te laisse corriger tous les scanf("%s", ...).
Et enfin, le gros problème se trouve dans la fonction supprimer().
Tu "supprimes" l'élément courant, mais il faut bien penser à rattacher l'élément d'avant à l'élément d'après. Je te laisse réfléchir sur ce point.
Cdlt,
Bonsoir
En plus de ce que @fiddy a dit en va éviter de mettre des
Puis découpon le programme en sous-programme c'est-à-dire, une fonction inséré qui va dynamiquement allouer les espaces nécessaires des cellule et ajouté automatiquement les donner et préparer le terrain pour la cellule suivante une fonction afficher pour afficher l'ensemble de donner et ta fameuse fonction supprimer une cellule en envoyant vrais ou faux.
Dans mon exemple, j'ai fait simple et pas optimiser on partons de ta structure initiale de plus, le choix des pointeurs en <gras>nom d'utilisateurs est mieux qu'une taille fixe car en ne sait pas réellement combien un nom peut prendre en taille surtout si c'est un non composer cas russe par exemple
Bref je tiens a précisé que c'est un exemple le code n'est pas optimisé et ont peut mieux faire.
à bientôt
En plus de ce que @fiddy a dit en va éviter de mettre des
typedefpartout "one" suffit.
Puis découpon le programme en sous-programme c'est-à-dire, une fonction inséré qui va dynamiquement allouer les espaces nécessaires des cellule et ajouté automatiquement les donner et préparer le terrain pour la cellule suivante une fonction afficher pour afficher l'ensemble de donner et ta fameuse fonction supprimer une cellule en envoyant vrais ou faux.
Dans mon exemple, j'ai fait simple et pas optimiser on partons de ta structure initiale de plus, le choix des pointeurs en <gras>nom d'utilisateurs est mieux qu'une taille fixe car en ne sait pas réellement combien un nom peut prendre en taille surtout si c'est un non composer cas russe par exemple
Bref je tiens a précisé que c'est un exemple le code n'est pas optimisé et ont peut mieux faire.
à bientôt
#include <stdio.h> #include <stdlib.h> #include <string.h> //Variable type Bool typedef enum{ false, true}bool; //Structure de donnée typedef struct s_Elev{ char *pNon; char *pPre; float fVal; unsigned int iPos; struct s_Elev *pN; }ts_Elev; /** * Insère les informations **/ void f_AddEleves( ts_Elev *pData, const char *pN,const char *pP, const float fVal ){ ts_Elev *p = pData; unsigned int i = 0; /** * Recherche dynamique de * la cellule à alouer **/ while( p->pN ){ i++; p = p->pN; } //Allocation de la cellule p->pN = (ts_Elev*)calloc( 1, sizeof(struct s_Elev) ); if( p->pN == NULL ){ perror( "Allocation pour new Elève\n" ); exit( EXIT_SUCCESS ); } p = p->pN; //Allocation sans contrôle de la nouvelle cellule p->pNon = (char*)calloc( strlen(pN), sizeof(char) ); p->pPre = (char*)calloc( strlen(pP), sizeof(char) ); //Ajout des informations p->iPos = i++; p->fVal = fVal; strcpy( p->pNon, pN ); strcpy( p->pPre, pP ); //Mise à nulle le pointeur suivant p->pN = NULL; } //Affiche la liste void f_AfficherListe( ts_Elev *pData ){ ts_Elev *p = pData; while( p ){ printf( "[\t%d\t]\t", p->iPos ); printf( "Nom\t:%s\t", p->pNon ); printf( "Prénom\t:%s \t", p->pPre ); printf( "Notes\t:%lf \n", p->fVal ); p = p->pN; } } /** * A faire **/ /*bool f_Suprimer( ts_Elev *pData, const char *pN ){ ts_Elev *p = pData; ts_Elev *o = NULL; while( (p->pN != NULL) && ( /*quelquechose != Quelquechose) ){ /*faire quelque chose } ( ... ){ free( o ); return ( true ); } return ( false ); }*/ //Programme Princiaple int main( void ){ ts_Elev ListE; (&ListE)->pN = NULL; f_AddEleves( &ListE, "Toto", "Titi", 0.14 ); f_AddEleves( &ListE, "Caca", "Bonb", 10.14 ); f_AddEleves( &ListE, "Verb", "sylv", 15.14 ); f_AddEleves( &ListE, "Piko", "Yesa", 9.14 ); f_AddEleves( &ListE, "Inté", "Géni", 20.00 ); f_AddEleves( &ListE, "ZigZ", "Flem", 0.1 ); f_AfficherListe( (&ListE)->pN ); /*if( f_Suprimer( (&ListE)->pN, "Verb" ) ){ printf( "Valeur Suprimer\n" ); } else printf( "La valeur à suprimer Existe pas\n" ); f_AfficherListe( (&ListE)->pN );*/ //Free de la liste à faire return ( EXIT_SUCCESS ); }
mon problème c'est le chaînage des élément de ma liste je veux dire que mémé si je fais pas la dés-allocation d'un élément il doit être disparu en affichage pasque j'ai fais (la ligne 70) j'ai mis l'adresse du suivant dans le suiv de l'element précédent de l'element que je veux supprimer