Sto scrivendo un programma didattico con gli alberi di ricerca binaria.
I problemi son 2:
-nella funzione visualizza, alla prima riga, mi da una violazione di accesso, errore di segmentazione, se uso il debug.
-nel secondo caso dello switch, non mi legge la fgets il cui argomento è n->indirizzo, quella commentata affianco tanto per intenderci.
Quali sono gli errori?
codice://*16. Utilizzando un albero binario di ricerca gestire un programma RUBRICA in cui in ogni nodo sono memorizzati i dati seguenti: a. Cognome b. Nome c. Sesso (M o F) d. Indirizzo e. Telefono f. Età Applicare il seguente menù: 0 - esci 1 - Inserisci nuovo elemento con caricamento ordinato per cognome e quindi per nome 2 - Cerca elemento X 3 - Visualizza tutto 4 - Statistiche: età media dei maschi e delle femmine 5 - Modifica dati elemento X 6 - Incrementa l'età d’ogni elemento di 1 (nuovo anno)*/ #include <conio.h> #include <stdio.h> #include <string.h> typedef struct rubr{ char cognome[20]; char nome[20]; char sesso; char indirizzo[20]; char tel[10]; int eta; struct rubr *left; struct rubr *right; }alb; void inizializza(alb **r){ *r=NULL; } alb *inserisci(alb *r, char cognome[]){ if(r==NULL){ r=(alb *)malloc(sizeof(alb)); r->left=NULL; r->right=NULL; return r; }else if(strcmp((r->cognome),cognome)<0){ return inserisci(r->left,cognome); }else{ return inserisci(r->left,cognome); } } void visualizza(alb *r){ if(r->left!=NULL) visualizza(r->left); //puts(r->cognome); printf("%s",r->cognome); if(r->right!=NULL) visualizza(r->right); } void menu(){ printf("0-Esci\n"); printf("1-Inserisci un nuovo contatto\n"); //printf("0-Inserisci un nuovo contatto\n"); printf("3-Visualizza\n"); printf("Inserisci la tua scelta: "); } main(){ alb *root; inizializza(&root); int scelta=1; char cognome[20]; while(scelta!=0){ system("cls"); menu(); scanf("%d",&scelta); switch(scelta){ case 1: system("cls"); printf("Inserisci il cognome,\n\t il nome,\n\t il sesso(S o M),\n\t l'indirizzo,\n\t il telefono \n\te l'eta',\n ognuno separato da un invio: "); fflush(stdin); fgets(cognome, sizeof(cognome), stdin); alb *n=inserisci(root, cognome); strcpy(cognome,n->cognome); fgets(n->nome, sizeof(n->nome), stdin); scanf("%c",&n->sesso); fgets(n->indirizzo, sizeof(n->indirizzo), stdin); //this fgets() isn't called fgets(n->tel, sizeof(n->tel), stdin); scanf("%d",&n->eta); break; /*case 2: break; */ case 3: system("cls"); visualizza(root); getch(); break; } } }

Rispondi quotando