PDA

View Full Version : [c] lettura da file


deviato
01-04-2008, 08:26
ho il seguente problema.. il programma mi scrive tranquillamente sul file però quando vado a fare la lettura il programma mi crasha tornando a windows.. probabilmente ho errato qualcosa nella funzione di lettura, ve la posto qua di seguito:



FILE *pass;

char ambulanze[20];


pass=fopen("ambulanze.dat","r");

if (pass==NULL) printf("impossibile aprire il file o file non presente\n\n");
else
{ fseek(pf,0,0);
fread(ambulanza,20,1,pf);
printf("%s\n",&ambulanza);
}


Utilizzo il dev-c++ per la compilazione.. tutto sotto windows, perfavore aiutatemi.. grazie!!

cionci
01-04-2008, 08:40
pf dove lo definisci ? Devi metterci pass invece di pf...

deviato
01-04-2008, 09:02
giusto.. che idiota.. ho fatto confusione con l'altra parte del programma..:doh:
se io dovessi fare un ciclo di lettura di piu file incrementando via via l'fseek come potrei fargli capire quando fermarsi perchè i dati nel file sono finiti?
Grazie ancora..

cionci
01-04-2008, 09:13
L'fseek non lo devi incrementare, il file va avanti ad ogni lettura.
Il file è terminato quando feof ti ritorna true (l'ultima lettura fatta non è valida) oppure è parzialmente valida in caso di fread con il terzo parametro > di 1.

http://www.cplusplus.com/reference/clibrary/cstdio/fread.html

deviato
01-04-2008, 09:28
si xò nella funzione che ho scritto prima con le modifiche di pf in pass mi legge solo il primo valore del file.. come devo fare per far apparire a video una lista di tutti i valori presenti?
grazie

cionci
01-04-2008, 09:31
fseek non ci vuole, fin quando vuoi muoverti sequenzialmente nel file ci pensa già da solo ad avanzare.
devi mettere la fread in un do while con feof nel controllo.

deviato
01-04-2008, 09:47
correggimi se erro:

do
{
fread(ambulanza,20,1,pass);
printf("%s\n",&ambulanza);
}while(!feof(pass));

però in questo modo continua a leggermi solo il primo valore del file o almeno mi stampa a video solo quello eppure controllando all'interno del file con un editor di testo mi risultano altri 4 valori..:muro:

cionci
01-04-2008, 09:49
Prima di tutto sbagli a stampare, devi togliere la & per la printf.

deviato
01-04-2008, 09:57
si scusami quello lo avevo già fatto.. solo che l'errore rimane..