#include #include #include #define MAXCARATTERI 20 struct _diz{ char inglese[MAXCARATTERI]; char italiano[MAXCARATTERI]; struct _diz *next; }; typedef struct _diz diz; FILE *fp; diz *head=NULL; void acquisisci(void); void traduci(void); void translate(void); void inserisci(void); void salva(void); void free_all(void); int main() { char temp[MAXCARATTERI]; int scelta; do{ printf("[1]Carica vocaboli\n[2]Traduci italiano/inglese\n[3]Traduci inglese/italiano\n"); printf("[4]Inserisci termini\n[5]Esci\n-->"); gets(temp); scelta=atoi(temp); switch(scelta){ case 1: free_all(); acquisisci(); break; case 2: traduci(); break; case 3: translate(); break; case 4: inserisci(); break; case 5: return 1; default: printf("Opzione errata\n"); } }while(scelta!=5); return 0; } void acquisisci(void) { char temp[80]; diz *p1; if((fp=fopen("diz.txt","r"))==NULL) { printf("Impossibile aprire il file\n"); exit(1); } while(fgets(temp,81,fp)!=NULL) { if(!head) { head=(diz*)malloc(sizeof(diz)); sscanf(temp,"%s %s",&head->italiano,&head->inglese); head->next=NULL; } else { p1=head; head=(diz*)malloc(sizeof(diz)); sscanf(temp,"%s %s",&head->italiano,&head->inglese); head->next=p1; } } fclose(fp); } void traduci(void) { diz *p1; char parola[MAXCARATTERI]; int found=0; printf("Inserisci la parola in italiano: "); fflush(stdout); gets(parola); for(p1=head;p1!=NULL;p1=p1->next) if(!strcmpi(p1->italiano,parola)) { printf("%s in english is %s\n",parola,p1->inglese); found=1; } if(!found) printf("Parola non presente in archivio\n"); } void translate(void) { diz *p1; char parola[MAXCARATTERI]; int found=0; printf("Please insert your word: "); fflush(stdout); gets(parola); for(p1=head;p1!=NULL;p1=p1->next) if(!strcmpi(p1->inglese,parola)) { printf("%s in italiano e' %s\n",parola,p1->italiano); found=1; } if(!found) printf("Word not found\n"); } void inserisci(void) { char ita[MAXCARATTERI],eng[MAXCARATTERI]; diz *p1; printf("Inserisci il termine in italiano: "); gets(ita); printf("Insert your word in english please: "); gets(eng); p1=head; head=(diz*)malloc(sizeof(diz)); strcpy(head->italiano,ita); strcpy(head->inglese,eng); head->next=p1; salva(); } void salva(void) { diz *p1; fp=fopen("diz.txt","w"); for(p1=head;p1!=NULL;p1=p1->next) fprintf(fp,"%s %s\n",p1->italiano,p1->inglese); fclose(fp); } void free_all(void) { diz *p0,*p1; int ok=0; p1=head; if(head==NULL) ok=1; while(!ok) { p0=p1; p1=p1->next; free(p0); if(p1==NULL) ok=1; } head=NULL; }