Buongiorno a tutti,
sono nuovo del forum e nuovissimo in ambito programmazione (infima esperienza di un mesetto); e ovviamente già con l'ABC ho grossi problemi: è più di un'ora che non riesco a spiegarmi il perché il programma che segue non funziona.
Quello che vorrei fare è: utilizzando C, leggere da file .txt una serie di nomi e stampare su un altro file .txt i nomi in ordine di lettura, assegnando ad ogni nome un numero, che corrisponde a tutte le volte che il nome in questione è comparso. Chiaramente il programma non deve stampare lo stesso nome più di una volta.
Insomma: stampare su un file diverso quanti omonimi di ogni nome ci sono in elenco.
Per nome intendo un'intera riga di testo: il nome che deve considerare non termina con un blank, ma con un enter a capo.
Tanto per fare un esempio di quello che vorrei:
in:
Mario Rossi
Antonio Verdi
Pinco Pallino
Antonio Verdi
out:
Mario Rossi 1
Antonio Verdi 2
Pinco Pallino 1
ecco il programma:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define A 5000
typedef struct{
char Nome[40];
int cont;
}Omonimo;
void main()
{
FILE *f1,*f2;
int i,j;
int nNomiDiv=1;
Omonimo C[A];
for(i=0;i<A;i++)
C.cont=1;
//inizializzo i contatori
f 1=fopen("Arch_in.txt","r");
for(i=0;feof(f1);i++)
{
fscanf(f1,"%-s",C.Nome);
}
//leggo i nomi
for(i=0;feof(f1);i++)
{
for(j=0;j<i;j++)
{
if(C.Nome!=C[j].Nome) nNomiDiv++;
else if(C.Nome==C[j].Nome) C[j].cont++;
}
}
//conto gli omonimi e quanti nomi diversi ci sono
f2=fopen("Arch_out.txt","w");
for(i=0;i<=nNomiDiv;i++)
{
fprintf(f2,"%s ",C.Nome);
fprintf(f2,"%d\n",C.cont);
}
//teoricamente volevo fargli stampare con quest'ultimo ciclo tutti i nomi diversi ma mi rendo conto da solo che così dovrebbe stampare solo i primi "nNomiDiv" nomi.
fclose(f1);
fclose(f2);
system("PAUSE");
return 0;
}
Comunque il programma non fa quello desiderato, ma sul file di out stampa solo
1
1
I file sono nella cartella giusta e non riesco a trovare gli errori nella stesura del programma. Immagino ce ne siano miliardi ! Tra l'altro sono anche in difficoltà per quanto riguarda lo stampare tutti i primi nomi diversi che compaiono (perché il programma che ho scritto dovrebbe incrementare i contatori solo del primo degli omonimi, ma a questo punto non sono più sicuro nemmeno di quello ).
Grazie in anticipo per l'aiuto
Catullo