Problema con una lista[C][RISOLTO]

fk16
Salve ragazzi per favore mi potete aiutare a capire cosa sbalgio nel codice???
/*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
yoshiharu
"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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.