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

Rispondi quotando