PDA

Visualizza la versione completa : struct su file in c


tonynapoli
22-02-2010, 18:28
salve ragazzi Ŕ la prima volta ke scrivo ma vi seguo tanto anche perchŔ molto spesso trovo le soluzioni ai miei problemi guardando quelle degli altri :)

questa volta per˛ nn sono riuscito a trovare la soluzione al mio problema e speravo ke qualcuno di voi mi potesse aiutare.La mia situazione Ŕ questa, devo creare un dizionario di sinonimi (massimo 5 per ogni parola) ke Ŕ indicizzato per lettere dell'alfabeto. ora io ho provato a creare una "struttura" con campi: indice, parola[5][20], sinonimo[4][20] ma nn riesco nella fase di lettura a leggermi questi dati da un file!
vi posto il codice..


...
//CODICE SCRITTURA FILE
typedef struct Dizionario
{
char indice;
struct {
char parola[20];
struct {
char sinonimi[20];
}s[5];
}p[4];
}d;
int i=0,f=0,c=0;
void main()
{

FILE *ofp;
d dizionario[23];
ofp= fopen("dizionario.dat", "wb");
dizionario[1].indice=97 //valore ascii
;
i=0;

while(i!=2)
{
i++;
dizionario[i].indice=dizionario[i].indice+1;
fwrite(&dizionario,sizeof(dizionario),1,ofp);
c=0;


while (!feof(stdin) && (c!=4))
{
fflush(stdin);
c++;
printf("i=%d,c=%d",i,c);
printf("\ninserisci la %d parola dell'indice %c: ",c,dizionario[i].indice);
scanf("%s", &dizionario[i].p[c].parola);
fwrite(&dizionario[i].p,sizeof(dizionario[i].p),1,ofp);

f=0;
while(f!=5)
{
f++;
printf("\n inserisci il %d sinonimo della parola %s: ",f,dizionario[i].p[c].parola);
scanf("%s", &dizionario[i].p[c].s[f].sinonimi);
fwrite(&dizionario[i].p[c].s,sizeof(dizionario[i].p[c].s),1,ofp);
}

}
}
fclose(ofp);
fflush(stdin);
}





//CODICE LETTURA

void main()
{


FILE *fl;

d dizionario[2];
d dizionario1[2];
fflush(stdin);

fl= fopen("dizionario.dat", "rb");

if (fl){
i=0;
for (i=0; i<=2; i++)
{
fscanf(fl,"%c",dizionario[i].indice);
dizionario1[i].indice=dizionario[i].indice;
c=0;
for (c=1; c<=4; c++)
{
fscanf(fl,"%s",dizionario[i].p[c].parola);
strcpy(dizionario1[i].p[c].parola,dizionario[i].p[c].parola);
f=0;
for (f=1; f<=5; f++)
{
fscanf(fl,"%s",dizionario[i].p[c].s[f].sinonimi);
strcpy(dizionario1[i].p[c].s[f].sinonimi, dizionario[i].p[c].s[f].sinonimi);
}
}
}
fclose(fl);
i=0;
c=0;
f=0;
for (i=0; i<=2; i++)
{
printf("indice=%c\n",dizionario1[i].indice);
c=0;
for (c=1; c<=4; c++)
{
printf("%d parola=%s\n",c,dizionario1[i].p[c].parola);
f=0;
for (f=1; f<=5; f++)
{
printf("%d sinonimo=%s",f,dizionario1[i].p[c].s[f].sinonimi);
}
}
}

}
}

il programma nn mi segnale errori ma poi quando mando in esecuzione la lettura mi dice "la memoria nn poteva essere read ....."
vi prego ragazzi mi potete aiutare devo completare questo progetto per l'universitÓ :S
grazie in anticipo

tonynapoli
22-02-2010, 18:47
chiedo scusa, volevo aggiungere ke ho sostituito i "fscanf" con



fread(&dizionario[i].p,sizeof(dizionario[i].p),1,fl);


fread(&dizionario[i].p[c],sizeof(dizionario[i].p[c]),1,fl);;

fread(&dizionario[i].p[c].s[f],sizeof(dizionario[i].p[c].s[f]),1,fl);

tonynapoli
22-02-2010, 21:49
ragÓ sono arrivato a stampare il contenuto del file ma invece di stamparmi quello ke gli ho scritto mi stampa tutti caratteri strani.
RagÓ per favore qualche anima gentile mi pu˛ aiutare?? entro fine sett devo consegnare il progetto ma se nn riesco a scrivere/leggere i caratteri scritti nn riesco ad andare avanti :incupito:

Loading