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 :
codice:
typedef struct SInfo{
TKey key;
TSat satellite;
}TInfo;
Dove:
codice:
typedef struct SKey{
char tessera[8];
}TKey;
typedef struct SSat{
char cognome[16];
char nome[16];
char partito[6];
int voti;
}TSat;
Ho implementato la funzione in questo modo :
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;
}
}
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:
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);
}
}
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.
La funzione equal e greater le ho definite come segue :
codice:
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;
}
qualcuno riesce a trovarmi l'errore grazie in anticipo per l'aiuto.