Sera a tutti. Stavo cimentandomi su un esercizio di lista di liste ma non riesco a capire dove sia il problema ne se le strutture con le rispettive funzioni sono correttamente implementate. Ho provveduto solo a caricamento da file, inserimento (per il momento non ho inserito la funzione in menu) e stampa. il testo è questo
Scrivere un programma che implementa una lista di attesa per le attività sportive fornite da una palestra.
La struttura dati da implementare è una lista di liste in cui la lista più esterna contiene le informazioni relative all'attività
sportiva e la lista interna l'anagrafica dell'utente.
I dati richiesti per l'attività sportiva sono: nome (stringa), durata (intero), codice (stringa)
I dati richiesti per l'utente sono: nome (stringa), età (intero), codice della prenotazione (stringa)
un esempio dei dati :
attivita:
123456 codice
2 durata (in ore)
Zumba nome (senza spazi bianchi nel mezzo)
prenotazione
123456 Codice dell'attività sportiva per identificare la lista dove inserire la prenotazione
0011 codice della prenotazione (unico)
paperino_paolino nome (senza spazi bianchi nel mezzo)
35 età
il codice:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define len 40
typedef struct s_utente{
char nome_utente[len],codice[len],prenot[len];
int eta;
}utente;
typedef struct s_nodo_utente{
utente info;
struct s_nodo_utente *next;
}nodo_utente;
typedef nodo_utente *lista_utente;
typedef struct s_attivita{
char nome_att[len],codice[len];
int durata;
}attivita;
typedef struct s_nodo_attivita{
attivita info;
lista_utente *punt_interno;
struct s_nodo_attivita *next;
}nodo_attivita;
typedef nodo_attivita *lista_attivita;
void inserimento_utente(lista_utente *lis, utente u){
lista_utente aux;
aux=(lista_utente)malloc(sizeof(nodo_utente));
aux->info=u;
aux->next=(*lis);
aux=(*lis);
}
void inserimento_attivita(lista_attivita *lis, attivita a){
lista_attivita paux;
paux=(lista_attivita)malloc(sizeof(nodo_attivita));
paux->info=a;
paux->punt_interno=NULL;
paux->next=(*lis);
paux=(*lis);
}
nodo_attivita *ricerca_attivita(lista_attivita lis, char *codice){
lista_attivita aux=lis;
while(aux!=NULL){
if( strcmp(codice,aux->info.codice)==0) return aux;
aux=aux->next;
}
return NULL;
}
int caricamento_utenti(lista_attivita *lis){
FILE *fp;
char codice_identita[len];
nodo_attivita * p_nodo_utente=NULL;
utente u;
fp=fopen("utenti.txt","r");
if(fp==NULL){
perror("");
exit(1);
return 0;
}
while( fscanf(fp,"%s\n%s\n%s\n%d",codice_identita,u.nome_utente,u.prenot,&u.eta) != EOF){
p_nodo_utente=ricerca_attivita(lis,codice_identita);
if(p_nodo_utente!=NULL){
fprintf(stderr, "\nL'utente %s è gia presente in questa attività.\n",codice_identita);
}
else inserimento_utente((&(p_nodo_utente->punt_interno)),u);
}
fclose(fp);
}
int caricamento_attivita(lista_attivita *lis){
FILE *fp;
attivita a;
fp=fopen("attivita.txt","r");
if(fp==NULL){
perror("");
exit(1);
}
while(fscanf(fp,"%s\n%d\n%s",a.codice,a.durata,a.nome_att)!=EOF){
inserimento_attivita(lis,a);
}
fclose(fp);
}
void stampa_utente(lista_utente lis){
lista_utente aux=lis;
while(aux!=NULL){
printf("\n>>>Prenotazione: %s ", aux->info.prenot);
printf("\n>>>Nome: %s",aux->info.nome_utente);
printf("\n>>>Eta: %d",aux->info.eta);
aux=aux->next;
}
}
void stampa_struttura(lista_attivita lis){
lista_attivita aux=lis;
while(aux !=NULL){
printf("\nCodice: %s",aux->info.codice);
printf("\nDurata: %d", aux->info.durata);
printf("\nNome attivita: %s",aux->info.nome_att);
stampa_utente(aux->punt_interno);
aux=aux->next;
}
}
int main(){
char testo[len];
lista_attivita lista_attivita=NULL;
lista_utente lista_utente=NULL;
utente u;
attivita a;
int scelta;
do{
printf("\n1)Caricamento");
printf("\n2)Inserimento");
printf("\n3)Stampa");
printf("\n0)Uscita");
printf("\n\n\t>>Scelta: ");
scanf("%d",&scelta);
switch(scelta){
case 1: caricamento_attivita(&lista_attivita);
caricamento_utenti(&lista_utente);
break;
case 3: stampa_struttura(lista_attivita);
break;
}
}while(scelta!=0);
}
Suggerimenti?