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");
}