Ciao a tutti,
vorrei porre alla vostra attenzione il seguente programma da me realizzato. Il programma è funzionante, tuttavia vorrei avere un vostro parere a riguardo ed eventuali suggerimenti per migliorarlo.
Grazie
codice:
// Programma che richiede all'utente di inserire un numero indefinito di nomi.
// Ogni nome viene memorizzato dinamicamente in una stringa.
// I nomi vengono memorizzati dinamicamente in un array di stringhe.
// L'inserimento termina quando l'utente digita la parola "exit" sulla linea di comando.
// Terminato l'inserimento il programma prevede a presentare sullo schermo i nomi inseriti.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef enum {FALSO, VERO} boolean;
main()
{
char* pnome;
char** plista;
char c;
boolean insertion, end;
int n_nomi = 0;
int n_caratteri = 0;
int k = 0;
int tot_mem = 0;
end = FALSO;
while(!end)
{
printf("\nInserire un nome o digitare 'exit' per uscire: ");
insertion = VERO;
while(insertion)
{
c=getchar();
if(n_caratteri==0)
{
if(c=='\n')
{
insertion=FALSO;
}
else if(c!='\n')
{
n_caratteri=2;
pnome=(char*)malloc(2);
if(pnome==NULL)
{
printf("Memoria insufficiente\n");
insertion==FALSO;
}
pnome[0]=c;
pnome[1]='\0';
}
}
else if(n_caratteri!=0)
{
if(c=='\n')
{
if(strcmp(pnome,"exit")==0)
{
insertion=FALSO;
end=VERO;
}
else if(strcmp(pnome,"exit")!=0)
{
if(n_nomi==0)
{
n_nomi=1;
plista[n_nomi-1]=(char*)malloc(n_caratteri);
strcpy(plista[n_nomi-1],pnome);
printf("Il nome inserito e': %s\nMemoria allocata %d byte\n",plista[n_nomi-1],n_caratteri);
}
else if(n_nomi!=0)
{
n_nomi++;
plista[n_nomi-1]=(char*)malloc(n_caratteri);
strcpy(plista[n_nomi-1],pnome);
printf("Il nome inserito e': %s\nMemoria allocata %d byte\n",plista[n_nomi-1],n_caratteri);
}
insertion=FALSO;
n_caratteri=0;
free(pnome);
}
}
else if(c!='\n')
{
n_caratteri++;
pnome=(char*)realloc(pnome,n_caratteri);
if(pnome==NULL)
{
printf("Memoria insufficiente a contenere tutto il nome\n");
insertion==FALSO;
}
pnome[n_caratteri-2]=c;
pnome[n_caratteri-1]='\0';
}
}
}
}
printf("\nLista nomi:\n");
for(k=0;k<n_nomi;k++)
{
printf("\t%s\n",plista[k]);
tot_mem=tot_mem+(strlen(plista[k])+1);
}
printf("\nTotale memoria allocata: %d\n",tot_mem);
printf("\nProgramma terminato dall'utente.\n");
}