Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Fine del file
Forum - C/C++ - Fine del file

Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 21:37
Lunedì, 21/11/2011
Per leggere un file binario fino alla fine, uso il seguente ciclo:

Codice sorgente - presumibilmente Plain Text

  1. while(ch = getc(fr) && (feof(fr)) && ungetc(ch, fr))
  2. {
  3. //leggi
  4. }



Il programma termina in modo imprevito. Facendo dei controlli, ho visto che se uso solo la funzione feof(), la lettura continua oltre la fine del file, generando l'errore, ma il ciclo non funziona neanche come ho provato io. Dove sbaglio?

PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 21:43
Lunedì, 21/11/2011
Trovato l'errore:

Codice sorgente - presumibilmente Plain Text

  1. while((ch = getc(fr)) && (!feof(fr)) && ungetc(ch, fr))
  2. {
  3. //leggi
  4. }


PM Quote
Avatar
Il_Bomba (Member)
Rookie


Messaggi: 33
Iscritto: 26/12/2010

Segnala al moderatore
Postato alle 21:51
Lunedì, 21/11/2011
Se devi leggere tutto il file carattere per carattere non puoi fare così?

Codice sorgente - presumibilmente Plain Text

  1. for(c=fgetc(filedaleggere);c!=EOF;c=fgetc(filedaleggere)){
  2. //altre istruzioni
  3. }



oppure

Codice sorgente - presumibilmente Plain Text

  1. c=fgetc(filedaleggere);
  2. while(c!=EOF){
  3. c=fgetc(filedaleggere);
  4. }



Può andare?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:23
Martedì, 22/11/2011
Attenzione ... se si accede ai file in binario, non esiste EOF ...

In quel caso tutti i byte sono uguali e il file finisce quando si legge l'ultimo (determinato dalla lunghezza in byte).





Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote