Ragazzi, allora, mi trovo di fronte ad un problema che proprio non riescono a risolvere, e non me lo spiego nemmeno.
Allora, ho queste due funzioni:
allora, come potete vedere modifica_occorrenza richiama la funzione cerca_occorrenza. La funzione compare serve a fare il confronto tra due elementi della lista.codice:int cerca_occorrenza(Lista L, int occ, item_type_lista *el, int (*compare)(item_type_lista *, item_type_lista *)) { if (!lista_vuota(L)) { Lista_ls l = (Lista_ls) L; struct campo_lista *temp = l->Head; int pos = 1; int occorrenza = 0; while (temp) { if ((*compare)(&temp->info, el) == 0) if (++occorrenza == occ) return pos; pos++; temp = temp->next; } } return 0; } int modifica_occorrenza(Lista L, int occ, item_type_lista *vecchio, item_type_lista *nuovo, int (*compare)(item_type_lista *, item_type_lista *)) { if (!lista_vuota(L)) { int pos = cerca_occorrenza(L, occ, vecchio, compare); printf("pos:\t%d\n", pos); if (pos) return assegna(L, pos, nuovo); } return 0; }
Se richiamo la funzione trova_occorrenza dal main funziona perfettamente, ma sulla stessa lista richiamo modifica_occorrenza e trova_occorrenza restituisce 0, come se non trovasse l'occorrenza.
La funzione modifica_occorrenza la richiamo così:
e compara è dichiarata:codice:eliminato = elimina_occorrenza(L, inserito, &elemento_vecchio, &elemento, compara);
scusate... avevo dimenticato il linguaggiocodice:int compara(item_type_lista *, item_type_lista *);

Rispondi quotando