[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
- Recherche musique - Guide
- Recherche par image - Guide
- Annuaire inversé gratuit liste rouge - Forum Internet / Réseaux sociaux
- Par la fonction recherche snap - Forum Snapchat
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;
}