VI chiedo per favore un chiarimento sul comportamento della tellg
A me risulta che restituisca la posizione su cui si trova il cursore di lettura all'interno di un file
Quindi il codice seguente
int pos;
char c;
for(int i =0; i<3; i++ ){
pos = f.tellg();
c=f.get();
cout << "Letto " << c << " in posizione " << pos<< endl;
}
se eseguito su un file che contiene il testo
abc
stampa come mi aspetto
Letto a in posizione 0
Letto b in posizione 1
Letto c in posizione 2
E fin qua tutto bene.
Però mi chiedo: perchè se nel file da cui leggo invece di
abc
c'è scritto
a
b
c
ottengo:
Letto a in posizione 0
Letto
in posizione 3
Letto b in posizione 4
Il mio dubbio riguarda il fatto che la prima lettura risulta sempre dalla posizione 0 mentre la seconda sembra "saltare" alla posizione 3 pur leggendo sempre il secondo carattere (che è diventato un a capo).
Se sempre lo stesso codice lo eseguo su un file che contiene
abc
def
ottengo
Letto a in posizione 0
Letto b in posizione 2
Letto c in posizione 3
Veramente questa funzione mi sconcerta
Mi sapete spiegare cosa non ho capito del suo funzionamento per favore? Perchè la presenza di più righe nel file va a influire sul valore restituito dalla tellg nelle prime posizioni del file?
Grazie
_____________________________________
Per completezza inserisco anche il programma completo
#include <iostream>
#include <fstream>
using namespace std;
main(){
fstream f;
char c;
int pos;
f.open("f.txt", ios::in);
if(!f){
cout << "errore lettura";
}
else{
for(int i =0; i<3; i++ ){
pos = f.tellg();
c=f.get();
cout << "Letto " << c << " in posizione " << pos<< endl;
}
}
f.close();
}