Ciao,ho dichiarato la variabile cont all'interno della funzione (se è questo che intendevi con "alloca un elemento, utilizzalo e ritornalo")cioè l'ho resa locale, ho chiamato la funzione come mi hai indicato ed ho provveduto a pulire i buffer (anche se non ho ben capito se bisogna pulirli dopo ogni scanf o alla fine dell'inserimento di tutti i campi di cont) ma non ho ottenuto il risultato sperato.
Allego la parte di codice modificata in modo che puoi darci un'occhiata; se ho frainteso le tue indicazioni ti chiedo di ridarmele in una forma più elementare (sono autodidatta ed è solo 1 mese che ho preso in mano il "C").
Ho pulito il buffer anche dopo la scanf che memorizza la risposta alla domanda se stampare o meno i contatti.
Ti saluto e ti ringrazio in anticipo.
codice:struct elemento *ins_elem() { struct elemento *p,*punt; int n,i; printf("quanti elementi vuoi inserire in rubrica? "); scanf("%d",&n); if (n==0) { p=NULL; }else { //inserimento primo contatto+++++++++++++++++++++++++++++++++++++++++++++++++++++++ p=(struct elemento*)malloc(sizeof(struct elemento)); printf("\nInserisci il primo elemento\n"); //ins_contact(); p->contatto=ins_contact();//&cont; punt=p;//associo il puntatore che scorrerà la lista //creo gli altri elementi+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ for (i=2; i<=n; i++) { punt->pun=(struct elemento*)malloc(sizeof(struct elemento));//creo l'altro elemento punt=punt->pun; printf("\nInserisci il %d elemento\n ",i); //ins_contact(); punt->contatto=ins_contact();//&cont; } punt->pun=NULL; } return p; } struct contatti *ins_contact() { struct contatti cont; printf("\nInserisci il cognome: "); scanf("%s",cont.cog); while (getchar()!='\n'); printf("\nInserisci il nome : "); scanf("%s",cont.nome); while (getchar()!='\n'); printf("\nInserisci il tel : "); scanf("%s",cont.tel); while (getchar()!='\n'); return &cont; }

Rispondi quotando