Ciao a tutti !
Devo scrivere un programma per la gestione dei parlamentari implementando il codice con gli alberi binari. Il programma, oltre alla funzioni di base, mi chiede di scrivere la funzioni "aggiungi voto parlamentare", essendo il campo Info definito come segue :
Dove:codice:typedef struct SInfo{ TKey key; TSat satellite; }TInfo;
Ho implementato la funzione in questo modo :codice:typedef struct SKey{ char tessera[8]; }TKey; typedef struct SSat{ char cognome[16]; char nome[16]; char partito[6]; int voti; }TSat;
Ora nel momento in cui invoco la funzione tree_search mi accorgo che il programma non arriva a CHECKPOINT 2, ma in esecuzione si blocca e mi da errore. La funzione search è la seguente :codice:bool assegna_voto(TTree tree){ TNode *parlamentare; TKey codice_tessera; printf("Inserire il codice tessera del parlamentare :"); scanf("%s", codice_tessera.tessera); parlamentare=tree_search(tree, codice_tessera); printf("CHECKPOINT 2\n"); if(parlamentare==NULL) return FALSE; else{ parlamentare->info.satellite.voti++; return TRUE; } }
In pratica mi sono accorto che (ho provato ad inserire un solo parlamentare) la funzione search non entra nel primo if, visto che, essendoci un solo parlamentare alla prima invocazione il programma dovrebbe entrare nell'if, ma CHECKPOINT1 mi viene stampato 2 volte ! per la precisione la funzione verifica la condizione "greater(key, tree->info.key", ossia entra nell'if dell'else esterno.codice:TNode* tree_search(TTree tree, TKey key){ printf("CHECKPOINT 1\n"); if(tree==NULL || equal(tree->info.key, key)){ printf("OKKEY\n"); return tree; } else{ if(greater(key, tree->info.key)){ return tree_search(tree->right, key); } else return tree_search(tree->left, key); } }
La funzione equal e greater le ho definite come segue :
qualcuno riesce a trovarmi l'errorecodice:bool greater(TKey key1, TKey key2){ return strcmp(key1.tessera,key2.tessera)>0; } bool equal(TKey key1, TKey key2){ return strcmp(key1.tessera,key2.tessera)==0; }grazie in anticipo per l'aiuto.

grazie in anticipo per l'aiuto.
Rispondi quotando