ifstream ищет неправильно - PullRequest
       63

ifstream ищет неправильно

0 голосов
/ 04 сентября 2018

по результатам:

--0 0
--1 2
--2 20
--3 0
BONJOUR MA BICHETTE
--4 -1
is_open
--5 -1
--6 -1
7 20
8 0

------- C CODE----------

++1 0
++2 20
++3 0
->BONJOUR MA BICHETTE

feof encountered
++4 20
++5 0
Program ended with exit code: 0

почему это выглядит

- 1 2

с

ifsA.seekg (0, std :: ios_base :: end);

вместо

- 1 20 (потому что размер файла равен 20!)

почему ничего не видно с

if (fsA.eof ())

зачем нужно делать

ifsA.clear ();

чтобы получить

7 20

разочарован

# включая

# включает

с использованием пространства имен std;

int main (int argc, const char * argv []) {

const char * c = "/ Users / uio / Desktop / C ++ _ PROB_SEEKG / C ++ _ PROB_SEEKG / 1.txt";

ifstream ifsA (c);

if (ifsA) {

Строка Ligne;

cout << "- 0" << ifsA.tellg () << endl; </p>

ifsA.seekg (std :: ios_base :: end);

cout << "- 1" << ifsA.tellg () << endl; </p>

ifsA.seekg (0, std :: ios_base :: end);

cout << "- 2" << ifsA.tellg () << endl; </p>

ifsA.seekg (ios_base :: beg);

cout << "- 3" << ifsA.tellg () << endl; </p>

while (getline (ifsA, ligne)) {

cout << ligne << endl; </p>

}

cout << "- 4" << ifsA.tellg () << endl; </p>

if (ifsA.is_open ())

cout << "is_open" << endl; </p>

ifsA.seekg (ios_base :: beg);

cout << "- 5" << ifsA.tellg () << endl; </p>

ifsA.seekg (0, ios_base :: beg);

cout << "- 6" << ifsA.tellg () << endl; </p>

if (ifsA.eof ())

cout << "eof" << endl; </p>

// https://stackoverflow.com/questions/16364301/whats-wrong-with-the-ifstream-seekg

ifsA.clear ();

cout << "7" << ifsA.tellg () << endl; </p>

if (ifsA.eof ())

cout << "eof" << endl; </p>

ifsA.seekg (ios_base :: beg);

cout << "8" << ifsA.tellg () << endl; </p>

}

else {

cerr << "ifstream !!" << endl; </p>

выход (1);

}

ставит ("------- КОД ----------");

# include

FILE * f = fopen (c, "r");

char buf [BUFSIZ];

if (f == NULL) {

perror ("fopen");

выход (1);

}

else {

printf ("++ 1% ld \ n", ftell (f));

fseek (f, 0, SEEK_END);

printf ("++ 2% ld \ n", ftell (f));

fseek (f, 0, SEEK_SET);

printf ("++ 3% ld \ n", ftell (f));

while (fgets (buf, BUFSIZ, f)! = NULL) {

printf ("->% s \ n", buf);

}

if (feof (f)) {

printf ("% s \ n", "встречено feof");

}

printf ("++ 4% ld \ n", ftell (f));

fseek (f, 0, SEEK_SET);

printf ("++ 5% ld \ n", ftell (f));

fclose (f);

}

возврат 0;

}

...