While(1) significa che cicla sempre
Poi nel momento in cui eseguo la lettura con fread salvo anche il valore che mi restituisce la funzione che può essere 0(=fine file,problemi hardware...) oppure 1(=OK!).
Inoltre in questo caso stampo solo i valori che hanno un numero di conto corrente maggiore di zero.
Ecco il codice sorgente finale:
#include <stdio.h>
#include <stdlib.h>
struct DatiClienti
{
int numconto;
char nome[15];
char cognome[10];
float bilancio;
}; //end struct
int main()
{
int ris;
printf("LETTURA DA FILE AD ACCESSO CASUALE!\n\n");
FILE *fPtr; //puntatore a file
struct DatiClienti clienti = {0,"","",0.0}; //creo variabile che si riferisce a DataClienti con parametri di default
//apertura del file per la lettura
if((fPtr = fopen("clienti.dat","rb"))==NULL)
printf("Errore, impossibile aprire o raggiungere file \a\n\n");
else
{
printf("%-6s%-16s%-11s%10s\n","Num","Nome","Cognome","Bilancio");
//lettura tramite ciclo while di tutti i record presenti nel file
while(1) //ciclo di lettura del file while = 1 -->cicla sempre
{
/*Lettura del file e restituzione del valore che mi restituisce la funzione fread
Se la funzione mi restituisce 1 ==> OK
Se mi ritorna 0 ==>fine file,errore hardware...
*/
ris = fread(&clienti,sizeof(struct DatiClienti),1,fPtr);
if(ris!=1)
break; //se il valore è diverso da 1 termino il ciclo con un break
if(clienti.numconto > 0) //se il numero di conto è diverso da zero stampo i parametri
printf("\n%-6d%-16s%-11s%10.2f\n",clienti.numconto,clienti.nome,clienti.cognome,clienti.bilancio);
} //end while
fclose(fPtr); //chiusura del file
} //end else
printf("\n\nLettura file completata!\n\n");
printf("Premere un tasto per uscire...\n");
return 0;
} //end main
Grazie e buona domenica!