Lista di struct
Salve ragazzi ..ho una lista di struct ..ovvero ogni nodo della lista è una struttura di questo tipo :
typedef struct { char nomeGiocatore[30];
int tempoImpiegato;
} NOME;
e la lista
struct listNodo{
NOME punteggi;
struct listNodo *Ptr_successivo;/* Puntatore al prossimo nodo*/
};
typedef struct listNodo LISTNODE;/* Sinonimo di struct ListNodo*/
typedef LISTNODE *LISTNODEPTR;
Dovrei leggere da file BINARIO una specie di classifica che consta di NOME e TEmpo impiegato e inserirla nella lista . Sto impazzendo con fread ...ma non ci riesco..mi potreste dare una mano?
typedef struct { char nomeGiocatore[30];
int tempoImpiegato;
} NOME;
e la lista
struct listNodo{
NOME punteggi;
struct listNodo *Ptr_successivo;/* Puntatore al prossimo nodo*/
};
typedef struct listNodo LISTNODE;/* Sinonimo di struct ListNodo*/
typedef LISTNODE *LISTNODEPTR;
Dovrei leggere da file BINARIO una specie di classifica che consta di NOME e TEmpo impiegato e inserirla nella lista . Sto impazzendo con fread ...ma non ci riesco..mi potreste dare una mano?
Risposte
In che modo i dati sono scritti nel file binario? Sei certo che siano nello stesso "formato" di quella stringa? Mostreresti il tuo codice?
non sono pratico di file binari... ho fatto così
void scriviClassificaSuFile()
{
fpIN = fopen("classifica.txt","wb");
fwrite(topTen,sizeof(LISTNODEPTR),1,fpIN);
fprintf(fpIN,"\n");
fclose(fpIN);
void statistiche(LISTNODEPTR Ptr_corrente) /* Visualizzazione della lista */
{
FILE *fp = fopen("classifica.txt", "rb");
fread(&topTen, sizeof(LISTNODEPTR), 1, fp);
fclose(fp);
//printf("Nome Giocatore: %s ; Tempo Impiegato: %s\n", punteggio.nomeGiocatore, punteggio.tempoImpiegato);
}
void scriviClassificaSuFile()
{
fpIN = fopen("classifica.txt","wb");
fwrite(topTen,sizeof(LISTNODEPTR),1,fpIN);
fprintf(fpIN,"\n");
fclose(fpIN);
void statistiche(LISTNODEPTR Ptr_corrente) /* Visualizzazione della lista */
{
FILE *fp = fopen("classifica.txt", "rb");
fread(&topTen, sizeof(LISTNODEPTR), 1, fp);
fclose(fp);
//printf("Nome Giocatore: %s ; Tempo Impiegato: %s\n", punteggio.nomeGiocatore, punteggio.tempoImpiegato);
}
Il tuo problema è in sizeof(LISTNODEPTR). LISTNODEPTR è un puntatore alla tua struttura e come tale ha dimensione diversa dalla struttura (normalmente 4 o 8 byte nei PC attuali). La tua struttura è invece molto più grossa. Devi usare sizeof(LISTNODE). Nota però che i puntatori non si mantengono una volta scritti su file...