Salve, il mio docente mi ha chiesto di realizzare una mini banca con un menù contenenti le varie funzioni, fin qui tutto bene sono riuscito ad elaborare il programma completo, inoltre mi ha chiesto di creare una scelta nel menù che crei un formato compattato del file con i dati...il problema è che quando provo a stampare a video il file compattato esso mi stampa i valori in modo disordinato..potreste aiutarmi?
1) programma sulla banca
#include <stdio.h>
#include <stdlib.h>
struct daticliente {
int conto; //numero di conto
char cognome[20]; //cognome utente
char nome[20]; //nome utente
double bilancio; //bilancio conto
};
int main() {
FILE *ptf; //puntatore a file
//crea dati cliente con informazioni di default
struct daticliente cliente= {0,"", "", 0.0};
/*fopen apre il file; se non riesce ad aprire il file;
* provoca l'uscita dal file
*/
if((ptf=fopen("credit.dat", "rb+"))==NULL) {
printf ("ERRORE: file non aperto corretamente\n");
}
else {
//chiede all'utente di specificare il numero del conto
printf ("inserisci numero di conto\n-"
"da 1 a 100, 0 per terminare l'inserimento degli input\n");
scanf ("%d", &cliente.conto);
/* l'utente inserisce le informazioni che verranno copiate nel file. */
while (cliente.conto !=0) {
// l'utente inserisce il cognome, il nome e il bilancio
printf ("inserisci: cognome, nome, bilancio:\n");
//imposta il cognome il nome e il bilancio del record
fscanf(stdin, "%s%s%lf", cliente.cognome, cliente.nome, &cliente.bilancio);
//trova la posizione nel file specificato dall'utente
fseek(ptf,(cliente.conto-1) * sizeof(struct daticliente), SEEK_SET);
//scrive l informazione specificata dall' utente nel file
fwrite (&cliente, sizeof(struct daticliente),1,ptf);
// consente all'utente di specificare un altro numero di conto
printf("inserisci un numero di conto:\n");
scanf("%d", &cliente.conto);
} //fine while
fclose(ptf); //chiusura file
} //fine else
system ("PAUSE");
return 0;
}
2) programma per il file compattato da stampare a video
#include <stdio.h>
#include <stdlib.h>
struct daticliente {
int conto; //numero di conto
char cognome[20]; //cognome utente
char nome[20]; //nome utente
double bilancio; //bilancio conto
};
int main() {
FILE *ptf;
//crea dati cliente con informazioni di default
struct daticliente cliente= {0,"", "", 0.0};
/*fopen apre il file; se non riesce ad aprire il file;
* provoca l'uscita dal file
*/
if((ptf=fopen("credit.dat", "rb"))==NULL) {
printf ("ERRORE: file non aperto corretamente\n");
}
else {
printf("%-6s%-16s%-11s%10s\n", "N. conto", "COGNOME", "NOME", "BILANCIO");
while(!feof(ptf)) {
//legge tutti i record da file finche non viene visualizzato l EOF
fread(&cliente, sizeof(struct daticliente),1,ptf);
//visualizza il record
if(cliente.conto !=0) {
printf("%-6d%-16s%-11s%10.2f\n",cliente.conto, cliente.cognome, cliente.nome, cliente.bilancio);
} //fine if
}//fine while
fclose(ptf);//chiusura file
}//fine else
system("PAUSE");
return 0;
} //fine main