Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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


Yep, I came back :P
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.


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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


Yep, I came back :P
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


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote