Problema con una lista[C][RISOLTO]
Salve ragazzi per favore mi potete aiutare a capire cosa sbalgio nel codice???
Il problema è il seguente: se dico al compilatore che voglio ad esempio inserire 5 elementi, poi me ne stampa uno solo....perchè????
Grazie a tutti dell'eventuale risposta.
/*Legge gli elementi di una lista in modo ricorsivo*/ #include<stdio.h> #include<stdlib.h> #include<time.h> typedef struct lista{ double val; struct lista *next; }LISTA; LISTA* ele_lista(LISTA*,int); void stampa_lista(LISTA*); int main(){ int lenght; LISTA *p; printf("Quanto deve essere lunga la lista?\n"); scanf("%d",&lenght); p=ele_lista(p,lenght); stampa_lista(p); printf("\n"); system("pause"); return 0; } LISTA* ele_lista(LISTA *p,int lenght){ int i; LISTA *succ=p; srand(time(NULL)); if(lenght==0) p=NULL; else{ p=(LISTA*)calloc(lenght,sizeof(LISTA)); p->val=(rand()%10)-10; for(i=1;i<lenght;i++){ succ->next=(LISTA*)malloc(sizeof(LISTA)); succ=succ->next; succ->val=(rand()%10)-10; } succ->next=NULL; } return p; } void stampa_lista(LISTA *p){ if(p==NULL) return; else{ printf("[%lf]-->",p->val); p=p->next; stampa_lista(p); } return; }
Il problema è il seguente: se dico al compilatore che voglio ad esempio inserire 5 elementi, poi me ne stampa uno solo....perchè????
Grazie a tutti dell'eventuale risposta.
Risposte
"fk16":
Salve ragazzi per favore mi potete aiutare a capire cosa sbalgio nel codice???LISTA* ele_lista(LISTA *p,int lenght){ int i; LISTA *succ=p; srand(time(NULL)); if(lenght==0) p=NULL; else{ p=(LISTA*)calloc(lenght,sizeof(LISTA)); p->val=(rand()%10)-10; for(i=1;i<lenght;i++){ succ->next=(LISTA*)malloc(sizeof(LISTA)); succ=succ->next; succ->val=(rand()%10)-10; } succ->next=NULL; } return p; }
Il problema è il seguente: se dico al compilatore che voglio ad esempio inserire 5 elementi, poi me ne stampa uno solo....perchè????
Il problema e' in questa funzione.
Quando chiami dal main() la funzione ele_lista(), il puntatore p non e' inizializzato.
Nel ciclo for succ parte da questo puntatore (accuratamente arbitrario...), il che non puo' essere giusto.
Prova a inizializzare
succ = p;
giusto prima del ciclo for, tipo
for(succ=p,i=1;i<length;i++) // etc