Visto che ieri siete stati così gentile, ne approfitto![]()
Devo leggere da un file un'elenco di parole e creare una lista di struct conteneti la parola e il numero di volte che questa compare nell'elenco. Poi devo stampare il tutto.
Ho fatto il programmino però l'ultima parola viene letta due volte e non ne capisco il motivo. Ho allegato il file parole.c al messaggio. Il file da leggere è del tipo:
gatto
cane
pesce
cinghiale
pesce
fringuello
cane
cinghiale
toro
topo
Forse non si può allegare il file .c quindi lo metto qua
codice:#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct _WORD{ char *parola; int num; struct _WORD *next; } WORD; WORD *head=NULL; void AddUpdate(char *parola); void Add(char *parola); void PrintList(); void Update(WORD *W); int main(int argc, char *argv[]){ FILE *fpin; char tmp[80+1]; int len; if((fpin=fopen(argv[1], "r")) == NULL ){ printf("Errore apertura file %s", argv[1]); } while(!feof(fpin)){ fgets(tmp, 80, fpin); AddUpdate(tmp); } PrintList(); } void AddUpdate(char *parola){ WORD *W; int i, flag=0; for(W=head; W!=NULL; W=W->next){ if(strcmp(W->parola, parola)==0){ Update(W); flag=1; } } if(flag==0){ Add(parola); } } void Add(char *parola){ WORD *W; W=malloc(sizeof(WORD)); W->num=1; W->parola=strdup(parola); /*Inserimento in testa*/ W->next=head; head=W; } void Update(WORD *W){ W->num++; } void PrintList() { WORD *W=head; while(W!=NULL){ printf("%s", W->parola); printf("%d\n", W->num); W=W->next; } }

Rispondi quotando