Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve ragazzi. Ho scritto un codice per l'inserimento in testa in una lista generica.
Non è tutta farina del mio sacco, visto che buona parte del codice l'ho trovata in rete.
All' esecuzione (non ho nè error nè warning), inserisco il dato, ma subito dopo, quando richiamo la stampa, mi viene mostrato un solo elemento alla volta (quindi deduco che sovrascriva) e oltretutto è sempre -1;
Non capisco quindi se l'errore è da ricercarsi nella stampa o nell' inserimento stesso.
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
typedefstruct elem {
struct elem* next;
void* key;
} elem;
elem* ins (elem*,void*,void*(*copia)(void*));
void* copia (void*);
elem* crea ();
void stampa (elem*);
main (){
void* n;
elem* head;
//head = crea();
while(1){
printf("Numero : ");
int insert;
scanf("%d",&insert);
n =&insert;
*(int*) n = insert;
ins (head,n,copia);
stampa (head);
system("pause");
}
puts("");
system("pause");
}
elem* ins (elem* head,void* k,void*(*copia)(void*)){
elem* temp;
temp =malloc(sizeof(elem));
temp->next = head;
temp->key = copia (k);
return temp;
}
void* copia (void* a){
int* temp;
if((temp =malloc(sizeof(int)))==NULL)returnNULL;
*temp =*(int*) a;
return(void*) temp;
}
elem* crea (){
elem* temp;
temp =NULL;
return temp;
}
void stampa (elem* head){
elem* cur;
cur = head;
while(cur !=NULL){
int t = cur->key;
printf("%d\n",t);
cur = cur->next;
}
}
A voi che siete sicuramente più esperti di me, chiedo di spiegarmi quale possa essere il problema, se appunto sia la stampa o l'inserimento.
Grazie anticipatamente
allora, questo codice non può essere C a causa di questa dichiarazione dentro il codice del main:
Codice sorgente - presumibilmente C/C++
printf ("Numero : ");
int insert;
scanf ("%d",&insert);
la dichiarazione del main è sbagliata:
Codice sorgente - presumibilmente Plain Text
main ()
deve essere
Codice sorgente - presumibilmente C/C++
int main()
oltre al fatto che il codice, come hai detto tu, è palesemente copiato, per due semplici motivi.
1) Questa è una lista generica, ovvero può contenere dati di qualsiasi genere (volendo anche non omogenei)
2) Utilizza una funzione di callback per effettuare la copia, il che evidenza un livello abbastanza alto del programmatore che l'hai scritta
Il problema sta sicuramente nella riga
Codice sorgente - presumibilmente Plain Text
ins(head, n, copia);
che dovrebbe essere
Codice sorgente - presumibilmente Plain Text
head = ins(head, n, copia);
perchè se tu avessi letto il codice di cui hai fatto copia-incolla avresti visto che la funzione ins restituisce la testa aggiornata.
questa volta ti ho aiutato, ma sappi che non tollero codice copiato e incollato, che sia l'ultima volta.
no continua a non funzionare ma adesso stampa il numero di elementi effettivi nella lista solo che stampa memoria, può essere un problema di stampa?
prima di stampare, è giusto il casting int?