Buongiorno a tutti,
il programma che dovrei realizzare deve creare una lista ordinata in modo decrescente, pian piano che l'utente inserisce i dati. I nodi hanno una struttura chiamata nodo e composta da un nome, un numero reale e ovviamente il puntatore al nodo successivo.
Il pezzo di codice successivo è quello relativo all'inserimento in mezzo alla lista.
p è nodo iniziale
temp è ausiliario, lo uso per memorizzare il dato appena inserito e per scorrere la lista.
Ho inserito un indice (i) e dei debug.
Inserendo come dati:
roma 5
milano 2
Il programma stampa
1 (prima printf per i)
entra qui
... (printf per tutti i passaggi)
entra qui10
1 (nuova printf per i prima che ricominci il ciclo)
Subito dopo crasha. Non capisco dov'è il problema nello scorrere la lista (condizione del while? temp=temp->next; in fondo? qualche indirizzamento sbagliato?)
Grazie mille per l'aiuto che potrete darmi
Questo è solo un estratto del programma, l'inserimento del primo elemento in testa alla lista vedo che funzionacodice:temp = (struct nodo*)malloc(sizeof(nodo)); strcpy(temp->nome, buffer); printf("Inserire il valore di concentrazione di inquinante:\n"); scanf("%lf", &temp->dato); temp->next=NULL; if (p==NULL) //se la lista e' vuota { p=(struct nodo*)malloc(sizeof(nodo)); strcpy(p->nome, temp->nome); p->dato=temp->dato; p->next=NULL; } else //se la lista non e' vuota { temp->next=p; i=0; while (temp->next!=NULL) //finche' non termina la lista { i++; printf("%d\n", i); printf("entra qui\n"); if (temp->next->dato<temp->dato) //se il nuovo dato e' maggiore dell'attuale massimo { printf("entra qui2\n"); nuovo=malloc(sizeof(struct nodo)); strcpy(nuovo->nome,temp->nome); nuovo->dato=temp->dato; printf("%lf\n", nuovo->dato); nuovo->next=p; temp->next=NULL; } else //se invece non e' il massimo { printf("entra qui3\n"); nuovo=malloc(sizeof(struct nodo)); printf("entra qui4\n"); strcpy(nuovo->nome,temp->nome); printf("entra qui5\n"); nuovo->dato=temp->dato; printf("entra qui6\n"); p->next=nuovo; printf("entra qui7\n"); nuovo->next=NULL; printf("entra qui8\n"); temp->next=NULL; printf("entra qui9\n"); } temp=temp->next; //scorro la lista verso il prossimo elemento printf("entra qui10\n"); printf("%d\n", i); }

Rispondi quotando