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