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++ - Dubbio con funzione feof(..) & fgetc
Forum - C/C++ - Dubbio con funzione feof(..) & fgetc

Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 16:54
Domenica, 14/11/2010
Sto studiando i file in C. Mi è venuto un dubbio:

Codice sorgente - presumibilmente C/C++

  1. FILE *read;
  2. char ch;
  3. while (!feof(read)) {
  4.         ch = fgetc(read);
  5.         fputc(ch, stdout);
  6. }



Questo frammento di codice dovrebbe leggere e stampare a video il contenuto di un file. La cosa che non mi è chiara è questo pezzo:

Codice sorgente - presumibilmente Plain Text

  1. ch = fgetc(read);


Nel ciclo while non è presente nessun incremento ecc. e quindi in teoria dovrebbe prendere sempre la stessa lettera.  L'unica spiegazione è che tutte le lettere vengono messe nel buffer
Codice sorgente - presumibilmente Plain Text

  1. fgetc(read);


e una alla volta vengono prese da ch.

Ma non ne sono sicuro! Idee?

Ultima modifica effettuata da Pitagora il 14/11/2010 alle 16:55
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 17:23
Domenica, 14/11/2010
per prima cosa, il codice è errato. Per funzionare, devi aprire il file con la fopen in questo modo:

Codice sorgente - presumibilmente C/C++

  1. FILE *read = fopen("nomefile", "r");
  2. char ch;
  3. etc....



Quando apri un file con la fopen crei una specie di puntatore nel file che parte all'inizio.
La fgetc legge un carattere e sposta il puntatore in avanti per leggere il successivo.

PM Quote
Avatar
Numa Pompilio (Ex-Member)
Pro


Messaggi: 66
Iscritto: 03/05/2010

Segnala al moderatore
Postato alle 19:27
Domenica, 14/11/2010
Testo quotato

Postato originariamente da lorenzo:
Quando apri un file con la fopen crei una specie di puntatore nel file che parte all'inizio.
La fgetc legge un carattere e sposta il puntatore in avanti per leggere il successivo.



e naturalmente devi riposizionare il puntatore per poter rileggere un "punto" dal quale sei già passato. E' un pò come leggere un libro come lo fanno i bambini.....col dito sul foglio.....solo che può andare solo in avanti.

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 20:08
Domenica, 14/11/2010
infatti esiste apposta la fseek

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 20:28
Domenica, 14/11/2010
ragazzi ma quello che ho postato é solo un frammento di codice...

Concentriamoci sulla mia domanda

Ultima modifica effettuata da Pitagora il 14/11/2010 alle 20:55
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:31
Domenica, 14/11/2010
1) è un frammento di codice incompleto e fuorviante...era meglio metterlo tutto(o almeno quello inerente alla domanda)

2) ti abbiamo già riposto in due, non hai letto quello che abbiamo scritto? Mi sembra già esaustivo

PM Quote