[C]Problème fonction recherche élément liste
Fermé
sportif_C
Messages postés
18
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
16 janvier 2012
-
16 janv. 2012 à 14:43
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 16 janv. 2012 à 20:34
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 16 janv. 2012 à 20:34
A voir également:
- [C]Problème fonction recherche élément liste
- Liste déroulante excel - Guide
- Fonction si et - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Liste déroulante en cascade - Guide
- Recherche adresse - Guide
1 réponse
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 16/01/2012 à 20:42
Modifié par Hxyp le 16/01/2012 à 20:42
Bonjour, dans le code vous avez mis :
"trouve" sera toujours à zéro avant la boucle, ne sais pas si le problème vient de là.
A part ça, je pense que vous utilisez une liste chaîné avec l'ajout par le début ? et que le premier élément à zéro sera au final le dernier ? Si tel est le cas pouvez faire simplement une fonction "foreach"/"callback" qui prend la pile et appel une fonction passée en paramètre et lui renvoi le pointeur actuel qu'il scrute dans la boucle, l'idée :
trouve = 0; while(trouve == 0 && tas !=NULL) {
"trouve" sera toujours à zéro avant la boucle, ne sais pas si le problème vient de là.
A part ça, je pense que vous utilisez une liste chaîné avec l'ajout par le début ? et que le premier élément à zéro sera au final le dernier ? Si tel est le cas pouvez faire simplement une fonction "foreach"/"callback" qui prend la pile et appel une fonction passée en paramètre et lui renvoi le pointeur actuel qu'il scrute dans la boucle, l'idée :
#include <stdio.h> #include <stdlib.h> typedef struct elementCustomer { int no; struct elementCustomer *suivant; }customer; typedef struct liste{ customer *debut; int taille; } Pile; Pile *init_pile(void){ Pile *pptr; pptr=malloc(sizeof(Pile)); if(pptr){ pptr->debut=NULL; pptr->taille=0; } else pptr=NULL; return pptr; } customer *ret_customer(int n){ customer *ptr; ptr = malloc(sizeof(customer)); if(ptr) ptr->no=n; else ptr=NULL; return ptr; } int add_customer(Pile *pptr, int n){ customer *cptr; cptr=ret_customer(n); if(cptr){ cptr->suivant=pptr->debut; pptr->debut=cptr; pptr->taille+=1; return 0; } return 1; } void foreach(Pile *pptr,int (*f)(customer *)){ /* la fonction qui utilse notre fonction et renvoi le customer * en parametre de celle-ci */ customer *cp=pptr->debut,*cptmp; while(cp!=NULL){ cptmp=cp; cp=cp->suivant; if(f(cptmp)) printf("f true\n"); else printf("f false\n"); } } int cb(customer *c){ /* fonction appelé par foreach il lui passe le customer en param */ printf("%d\n",c->no); if(c->no>10) return 1; return 0; } int freelist(customer *c){ if(c)free(c); return 0; } int main(void) { int t[4]={1,5,39,3},i; Pile *p=init_pile(); for(i=0;i<4;i++) add_customer(p,t[i]); printf("list:\n"); foreach(p,cb); printf("free list:\n"); foreach(p,freelist); free(p); return 0; }