08/12/11 20:21
Driverfury
Rieccomi con un altro "piccolo" problema.
Ho scritto questa funzione per leggere una struttura da file binario:
Voi direte: dov'è il problema? Questa funzione è come se non entrasse proprio nel ciclo while perchè a video stampa solo "Totale Clienti: 0".
Premetto che:
1) Il file "clients.dat", ovviamente, non è vuoto ma con la funzione fwrite() scrivo una struttura client sul file stesso.
2) Il file "clients.dat" è nella stessa destinazione del file sorgente che contiene questa funzione.
3) Forse può essere banale come premessa però per evitare fraintesi ci tengo a precisare che, naturalmente, la funzione readClient() viene richiamata nella funzione main().
La cosa strana è che ho un altro file sorgente che ha il seguente codice:
Questo codice invece funziona. Sono un paio di giorni che mi sto scervellando per capire dov'è l'errore. Aiutatemi, per favore.
Ho scritto questa funzione per leggere una struttura da file binario:
#include <stdio.h> #include <stdlib.h> #define CLIENTS_FILE "clients.dat" // Struttura cliente typedef struct { char name[50]; char surname[50]; float cost; } client; int readClient() { FILE *fp = NULL; client c; int i=0; if(!(fp=fopen(CLIENTS_FILE, "r"))) { printf("Impossibile aprire il file \"%s\" in modalita' lettura.\n", CLIENTS_FILE); return 0; // Se non riesce ad aprire il file ritorna 0 } while(fread(&c, sizeof(c), 1, fp)>0) { printf("\n--- CLIENTE #%d ---", i+1); printf("Nome Cliente: %s\n", c.name); printf("Cognome Cliente: %s\n", c.surname); printf("Spesa: %f\n\n", c.cost); i++; } printf("\nTotale Clienti: %d\n", i); fclose(fp); // Chiudo il file return 1; // Se tutto va a buon fine ritorna 1 }
Voi direte: dov'è il problema? Questa funzione è come se non entrasse proprio nel ciclo while perchè a video stampa solo "Totale Clienti: 0".
Premetto che:
1) Il file "clients.dat", ovviamente, non è vuoto ma con la funzione fwrite() scrivo una struttura client sul file stesso.
2) Il file "clients.dat" è nella stessa destinazione del file sorgente che contiene questa funzione.
3) Forse può essere banale come premessa però per evitare fraintesi ci tengo a precisare che, naturalmente, la funzione readClient() viene richiamata nella funzione main().
La cosa strana è che ho un altro file sorgente che ha il seguente codice:
#include <stdio.h> #include <stdlib.h> #define USER_FILE "user.dat" // Struttura: Utente typedef struct { char user[30]; char pass[30]; char email[50]; int age; } user; int main() { FILE *fp; user u; int size_w = 0; // Dimensione dei dati scritti su file int i=0; if(!(fp=fopen(USER_FILE, "a"))) { printf("Impossibile aprire il file \"%s\" in modalita' append.", USER_FILE); exit(1); } /* Inserimento nuovo utente */ printf ("===Inseririmento di un nuovo utente===\n\n"); printf ("Username: "); scanf ("%s",u.user); printf ("Password: "); scanf ("%s",u.pass); printf ("Email: "); scanf ("%s",u.email); printf ("Eta': "); scanf ("%d",&u.age); if((size_w=fwrite(&u, sizeof(u), 1, fp))>0) { printf("Dati scritti con successo sul file!\n"); printf("Sono stati scritti %d B di dati.\n", size_w); } else { printf ("Errore nella scrittura dei dati su file\n"); } fclose(fp); if(!(fp=fopen(USER_FILE, "r"))) { printf("Errore nell'apertura del file \"%s\" in modalita' lettura.", USER_FILE); exit(1); } while(fread(&u, sizeof(u), 1, fp)>0) { printf ("Username: %s\n",u.user); printf ("Password: %s\n",u.pass); printf ("Email: %s\n",u.email); printf ("Eta': %d\n\n",u.age); i++; } printf ("Utenti letti nel file: %d\n",i); fclose (fp); system("PAUSE"); return 0; }
Questo codice invece funziona. Sono un paio di giorni che mi sto scervellando per capire dov'è l'errore. Aiutatemi, per favore.
Ultima modifica effettuata da Driverfury 08/12/11 20:24
aaa