| Autore |
Discussione  |
|
|
mauroste
Nuovo Utente
|
Inserito il - 07/07/2004 : 16:59:47
|
Ragazzi provate questo programma e ditemi cosa c'e che nn va
/*Lettura di dati da un file sequenziale e stampa degli stessi*/
#include <stdio.h> #include <stdlib.h>
main()
{ int nroconto;
char nome[30];
float saldo;
FILE *cfPtr;
if((cfPtr=fopen("clienti.dat","r"))==NULL)
/*se il file non e' aperto in lettura*/
printf("Il file potrebbe non essere aperto in lettura.\n\n");
else {
printf("%-10s%-13s%s\n","NroConto","Nome","Saldo");
fscanf(cfPtr,"d%s%f",&nroconto,nome,&saldo); /*leggo un rcord dal file puntato da cfPtr*/
while(!feof(cfPtr)) /*finche nn termina il file,cioe finche' ci sono ancora record da leggere ,stampo quello che ho letto e continuo a leggere*/ { printf("%-10d%-13d%7.2f\n",nroconto,nome,saldo); fscanf(cfPtr,"d%s%f",&nroconto,nome,&saldo);
}
fclose(cfPtr);
/*quando ho terminato la lettura del file chiudo il file attrverso il puntatore ad esso*/
}
system("PAUSE"); return 0; }
|
|
|
novantuno
Ero-sannin
  

Regione: Puglia
Prov.: Bari
Città: Modugno
|
Inserito il - 07/07/2004 : 17:14:00
|
A prima vista sembra a posto ! Penso che potresti usare fread ed fwrite al posto di fscanf ed fwrite, visto che hai il campo numero conto ! |
 |
|
|
mauroste
Nuovo Utente
|
Inserito il - 07/07/2004 : 18:21:40
|
Date un occhiata anche a questo,vi prego!!!!
/*Programma che consente ad un amministratore del credito di ottenere:
1:l'elenco dei clienti con saldo a zero(ovvero che nn hanno ricevuto nessun
prestito) 2:l'elenco dei clienti con saldo a credito(ovvero quelli a cui l'azienda deve del denaro) (=ammontare negativo)
3:l'elenco dei clienti con saldo a debito(ovvero quelli che hanno ricevuto prestiti dalll'azienda)=(ammontare positivo)*/
#include <stdio.h> #include <stdlib.h>
main() { int richiesta,nroconto;
char nome[30];
float saldo;
FILE *cfPtr;
/*puntatore al file che si intende leggere*/
if((cfPtr=fopen("clienti.dat","w"))==NULL) /*se il file non e' stato aperto in scrittura*/
printf("Il file potrebbe non essere stato aperto in scrittura\n\n");
else{
printf("\n\nInserisci nroconto,nome e saldo.\n\n ");
printf("\n\nDigita EOF per terminare l'inserimento.\n\n");
printf("? ");
scanf("%d%s%f",&nroconto,nome,&saldo);
while(!feof(stdin))/*fino a che nn si incontra il terminatore di eof*/ { fprintf(cfPtr,"%d%s%.2f\n",nroconto,nome,saldo); /*scrivi i dati inseriti nel file clienti.dat,puntato da cfPrt*/
printf("? ");
scanf("%d%s%f",&nroconto,nome,&saldo);
}
fclose(cfPtr);
}
if((cfPtr=fopen("clienti.dat","r"))==NULL)
/*Se il file non e' stato aperto in lettura*/
printf("Il file non potrebbe essere stato aperto in lettura.\n");
else { printf("Inserisci la richiesta\n");
printf("1 -Elenca i clienti con saldo a zero\n");
printf("2 -Elenca i clienti con saldo a credito\n");
printf("3 -Elenca i clienti con saldo a debito\n");
printf("Termina l'esecuzione del programma\n?");
scanf("%d",&richiesta);
while(richiesta != 4) {
fscanf(cfPtr,"%d%s%f",&nroconto,nome,&saldo);
/*leggi dal file le info che ti servono cioe nroconto,nome e saldo*/
switch(richiesta) {
case 1:
printf("\n Clienti con saldo a zero :\n") ;
while(!feof(cfPtr)) {
if(saldo==0)
printf("%-10d%-13s%7.2f\n",nroconto,nome,saldo); /*scrive le info lette e ne legge altre*/
fscanf(cfPtr,"%d%s%f",&nroconto,nome,&saldo);
}
break;
case 2:
printf("\n Clienti con saldo a credito :\n") ;
while(!feof(cfPtr)) {
if(saldo<0)
printf("%-10d%-13s%7.2f\n",nroconto,nome,saldo); /*scrive le info lette e ne legge altre*/
fscanf(cfPtr,"%d%s%f",&nroconto,nome,&saldo);
}
break;
case 3:
printf("\n Clienti con saldo a debito :\n") ;
while(!feof(cfPtr)) {
if(saldo>0)
printf("%-10d%-13s%7.2f\n",nroconto,nome,saldo); /*scrive le info lette e ne legge altre*/
fscanf(cfPtr,"d%s%f",&nroconto,nome,&saldo);
}
break;
}
rewind(cfPtr);
/*riposizioniamo il puntatore di posizione del file all'inizio del file per una revisione*/
printf("\n");
scanf("%d",&richiesta); /*chiede di nuovo la lista che si vuole leggere*/
}
printf("Fine del programma.\n");
/*Se abbiamo digitato 4*/
fclose(cfPtr);/*chiudiamo il file aperto in lettura*/
} system("PAUSE"); return 0; } |
 |
|
|
badpenguin
Nuovo Utente

Regione: Puglia
Prov.: Bari
|
Inserito il - 07/07/2004 : 20:17:26
|
Nel primo programma il problema è in questo gruppo di istruzioni:
1-fscanf(cfPtr,"d%s%f",&nroconto,nome,&saldo); /*leggo un rcord dal file puntato da cfPtr*/
while(!feof(cfPtr)) /*finche nn termina il file,cioe finche' ci sono ancora record da leggere ,stampo quello che ho letto e continuo a leggere*/ {2- printf("%-10d%-13d%7.2f\n",nroconto,nome,saldo); 3-fscanf(cfPtr,"d%s%f",&nroconto,nome,&saldo);
La 1- dovrebbe essere così :fscanf(cfPtr,"%d%s%f",&nroconto,nome,&saldo); hai dimenticato di antecedere % ;)
nella 2- dovresti scrivere printf("%-10d%-13s%7.2f\n",nroconto,nome,saldo); il secondo parametro è un tipo stringa e non un integer.
nella 3- idem come 1-
Nel secondo programma, nella parte in cui scrivi su file i dati che inserisci da stdin dovresti scrivere fprintf(cfPtr,"%d\t%s\t%7.2f\n",nroconto,nome,saldo);
Il "\t" viene usato come carattere di tabulazione per separare i vari campi (nrconto, nome, saldo)
Ciao. |
Software is like sex: it's better when it's free. (Linus Torvalds) |
Modificato da - badpenguin in data |
 |
|
| |
Discussione  |
|
|
|