Ciao ragazzi,
sono alle prese con la programmazione in c e ho qualche problema con la funzione stampa nella lista di liste.
Il debug mi dice che c'è un errore di segmentazione e se provo ad eseguirlo si crasha!!![]()
mi sapete aiutare???
vi posto il codice:
Formattazione codice aggiunta da Alkacodice:#include<stdio.h> #include<stdlib.h> #include<string.h> #define LEN 30 #define fcentraline "centraline.txt" typedef struct Atomodati{ int ora; int min; char data[LEN]; float temp; float press; float umid; }Atomodati,Tatomodati; typedef struct Lista_dati{ Atomodati dato; struct Lista_dati *succ; }Lista_dati,*Tlista_dati; typedef struct Atomocentraline{ int id; char ubicazione[LEN]; int tipo; Tlista_dati dati_ril; }Atomocentraline,Tatomocentraline; typedef struct Lista_centraline{ Atomocentraline dato; struct Lista_centraline *succ; }Lista_centraline,*Tlista_centraline; void cons(Tlista_centraline *l,Atomocentraline e) { Tlista_centraline tmp; tmp=(Tlista_centraline)malloc(sizeof(Lista_centraline)); if(tmp==NULL) { printf("errore 1 \n"); system("pause"); exit(-1); } tmp->dato=e; tmp->succ=*l; (*l)=tmp; } void cons2(Tlista_dati *l,Atomodati e) { Tlista_dati tmp; tmp=(Tlista_dati)malloc(sizeof(Lista_dati)); if(tmp==NULL) { printf("errore 2 \n"); system("pause"); exit(-1); } tmp->dato=e; tmp->succ=*l; (*l)=tmp; } void insord_dati(Tlista_dati *l,Atomodati e) { if(((*l)==NULL)||(strcmp((*l)->dato.data,e.data)<0)) cons2 (l,e); else insord_dati(&(*l)->succ,e); } void insord_centraline(Tlista_centraline *l,Atomocentraline e) { if(((*l)==NULL)||((*l)->dato.id<e.id)) cons (l,e); else insord_centraline(&(*l)->succ,e); } void carica_lista(Tlista_centraline *l) { Atomocentraline c; Atomodati d; FILE *fp; fp=fopen (fcentraline,"r"); while (fscanf(fp,"%d",&c.id)!=EOF) { fgets(c.ubicazione,LEN,fp); c.ubicazione[strlen(c.ubicazione)-1]='\0'; fscanf(fp,"%d",&c.tipo); c.dati_ril=NULL; cons (l,c); while(fscanf(fp,"%d",&d.ora)!=EOF) { fscanf(fp,"%d",&d.min); fgets(d.data,LEN,fp); d.data[strlen(d.data)-1]='\0'; fscanf(fp,"%f",&d.temp); fscanf(fp,"%f",&d.press); fscanf(fp,"%f",&d.umid); cons2(&((*l)->dato.dati_ril),d); } }printf("liste caricate\n"); fclose(fp); } //data id e ora stampare tutte le ubicazioni void stampa (Tlista_centraline l) { int x,y; Tlista_dati tmp; printf ("inserisci id\n"); scanf ("%d",&x); printf ("inserisci ora\n"); scanf ("%d",&y); while (l!=NULL) { tmp=l->dato.dati_ril; if (l->dato.id==x && tmp->dato.ora==y) printf ("ecco le ubicazioni che cercavi %d",l->dato.ubicazione); l=l->succ; } } int main() { Tlista_dati ld; Tlista_centraline lc; carica_lista(&lc); stampa(ld); system("pause"); return 0; }

Rispondi quotando