1

Доброго вечера. Подскажите, почему данный код:

while (!file.eof())
{

    file >> p1.x >> p1.y;
    MyVector.push_back(p1);

    cout << p1.x << " " << p1.y<<endl;

}

При такой информации в файле:

0 0
0 10
10 10
10 0

Выведет следующее:

0 0 
0 10
10 10
10 0
10 0 

и соответственно размер вектора будет равен 5?

P.S. надо обойти этот момент

ixSci
  • 23,825

1 Answers1

0

Не делайте так: while (!file.eof())

Эта проверка сработает только после неудачного чтения за концом файла.

А вы здесь

file >> p1.x >> p1.y;
MyVector.push_back(p1);

удачность чтения не проверяете...

Ну, раз @ixSci настаивает... [Менторским тоном] - надо вот так:

while (file >> p1.x >> p1.y)
{
    MyVector.push_back(p1);
    cout << p1.x << " " << p1.y<<endl;
}
Harry
  • 221,325
  • @ Harry, удачность чтения проверяется выше в коде. В том числе и наличие файла используя #include <experimental/filesystem> и !is_regular_file(filename) –  Nov 22 '17 at 17:50
  • Так Вы покажите человеку как правильно, что же только проблему описали? – ixSci Nov 22 '17 at 17:51
  • Ну, если вы все знаете и понимаете - зачем спрашивать? – Harry Nov 22 '17 at 17:51
  • @ixSci Человек, как видите, упирается ногами и руками... И потом - я фактически написал - проверять удачность чтения - этого мало? – Harry Nov 22 '17 at 17:52
  • 1
    Он просто не понимает, вряд ли упирается. – ixSci Nov 22 '17 at 17:52