PDA

Visualizza la versione completa : [c++] dubbio su eof()


g.b99pm10
18-02-2014, 19:58
Salve a tutti, stavo facendo un programma che interagisce con dei file.
Mi quindi venuto un dubbio sull'utilizzo di eof().
se io avessi un ciclo while(file.eof()){}, il cursore aumenta di una posizione ad ogni ciclo, giusto?
quindi, se ad un certo punto dovessi saltare una parte di file, potrei spostare semplicemente il cursore pi avanti? Faccio un esempio con uno pseudolinguaggio


while(file.eof)
{
if(hai stampato 100 caratteri)
{
riposiziona il cursore 20 caratteri dopo;

}
ottieni il carattere e stampalo a schermo;
}


in questo modo, il programma dovrebbe stampare 100 caratteri, saltarne 20 e poi continuare fino alla fine.

Funziona?

Grazie mille per l'attenzione che mi avete dedicato.
Ciao :ciauz:

shodan
18-02-2014, 20:22
il cursore aumenta di una posizione ad ogni ciclo, giusto?

No. eof() controlla soltanto se stata raggiunta la fine del file. Gli avanzamenti sono impliciti in una lettura oppure con un posizionamento esplicito.


Funziona?

Solo se all'interno dell'if espliciti un riposizionamento.

LeleFT
19-02-2014, 09:45
Credo che, comunque, in quel modo non funzionerebbe affatto.
Dalla documentazione, eof() ritorna TRUE se stata raggiunta la fine del file. Quindi in quel modo, se il file non vuoto, nel while non ci entra proprio.




while( !file.eof() ) {
...
}



Ciao. :ciauz:

g.b99pm10
19-02-2014, 15:33
eof() controlla soltanto se stata raggiunta la fine del file

Su che cosa si basa la funzione eof() per capire se la lettura del file finita? e soprattutto, come mai gli avanzamenti sono impliciti in una lettura? Io pensavo che la funzione eof() facesse progredire l'avanzamento del cursore, quindi ora mi sono cadute le fondamenta:afraid: . Come fa il cursore a progredire?

Grazie mille per avermi aiutato.

Ciao :)

shodan
19-02-2014, 20:08
e soprattutto, come mai gli avanzamenti sono impliciti in una lettura?

Beh, quando leggi non muovi gli occhi e avanzi carattere per carattere?
Stessa cosa fa la funzione di lettura del file: legge carattere per carattere (quindi avanzando) e mette il risultato in un buffer. Quando i caratteri letti sono minori della dimensione del buffer si raggiunta la fine del file, quindi viene settato il flag di EOF che sar restituito dalla funzione eof() che indica che il file finito.

Da notare che nella pratica il controllo su eof() non viene praticamente mai eseguito. E' preferibile testare good() per verificare che lo stream sia valido (lo stream infatti potrebbe essere invalidato anche da errori dovuti a caratteri non previsti).

g.b99pm10
20-02-2014, 16:03
grazie mille per l'attenzione, ora ho capito. Chiari come sempre :)

ciaooo

Loading