Potresti chiedere come ulteriore parametro N quanti indirizzi si vogliono inserire ed allocare la memoria in conseguenza di questo, in questo modo il ciclo avrebbe solo N interazione e non dovresti chiedere se si desidera inserirne altri.
Oppure dovresti utilizzare realloc nel ciclo, questo manterrebbe la possibilità di inserire indirizzi finché l'utente dice stop ma non è il top dell'efficienza e bisogna riallocare con parsimonia (tipo ogni tot cicli).
Approccio 2
codice:# define NEW_RECORDS 10 struct mail{ char indirizzo[30]; } *email = NULL; int i=-1; int n=0; int allocazioni = 1; char scelta[2]; email=(struct mail*)malloc(NEW_RECORDS*sizeof(struct mail)); //alloco inizialmente 10 posti do { i++; if (i == allocazioni * NEW_RECORDS){ email=(struct mail*)realloc(((allocazioni ++) * NEW_RECORDS)*sizeof(struct mail)); // realloc è dispendiosa, alloco 10 nuovi record per volta } printf("\nInserisci il %d° indirizzo email: ",i+1); scanf("%s", email[i].indirizzo); printf("\nNuovo indirizzo?: "); scanf("%s", scelta); } while (strcmp(scelta,"s")==0); for (n=0; n<=i; n++) { printf("\nMail nr.%d: %s",n+1,email[n].indirizzo); } free (email);

Rispondi quotando