Uso della fread in C

Pubblicità

alfo1

Utente Attivo
Messaggi
84
Reazioni
4
Punteggio
28
Ho un file dati in un file esterno al programma con un elenco alfabetico , dovrei scrivere un programma in C che legga invece questa elenco dall ultimo al primo pero in ordine..
Esempio: Mario Rossi
Dino Zoof
--> vorrei si leggesse
dino zoff --> che e' l ultimo
e Mario rossi

il nome e' un array cosi come il cognome e sono contenuti in una struttura con anche un intero che e' l'anno di nascita, ma quello e' secondario.
Per leggere inversamente avevo pensato di fare una fseek a fine file e poi spostarmi sempre indietro della dimensione della strutture (ricavata coin sizeOF)
solo che non funziona .. sapreste aiutarmi?
 
In teoria così dovrebbe funzionare... ho fatto diversi test (anche con il file vuoto o con un solo elemento) e va... fammi sapere :)

Codice:
#include <stdlib.h>
#include <stdio.h>
#include "header.h"

int main() {
	FILE *f = fopen("prova.dat", "rb");
	struct persona letto;
	int esito;
	if(!f) exit(1);
	esito = fseek(f, -sizeof(struct persona), SEEK_END);
	while(esito != -1) {
		fread(&letto, sizeof(struct persona), 1, f);
		printf("\nCognome -> %s\nNome -> %s\nAnno -> %d\n\n", letto.cognome, letto.nome, letto.anno);
		esito = fseek(f, -2 * sizeof(struct persona), SEEK_CUR);
	}
	fclose(f);
	return EXIT_SUCCESS;
}

EDIT: io ho messo la definizione di struct persona in un file esterno (header.h) perché la usavo in diversi sorgenti (per riempire il file, leggerlo "dritto", etc)... per far compilare il file, dovresti metterla prima del main (o creare anche te un file esterno e metterci lì la definizione).
 
Pubblicità
Pubblicità
Indietro
Top