Как правило, для чтения всего файла вы читаете до тех пор, пока не произойдет сбой чтения.Тогда вы знаете, что либо что-то пошло не так, или вы их все поняли.В любом случае, вы не можете знать, что достигли конца файла, пока не прочитаете.Так как первый успешен, он должен попробовать второй раз, чтобы выяснить, есть ли второй элемент.Псудокод для этого -
while(in_stream >> object) {
myvector.push_back(object);
}
Также обратите внимание, что это «идиоматический» способ чтения всего файла значений.Если вы проверяете eof
, fail
или bad
, ваш код, вероятно, неверен.
Тем не менее, ваша istream& operator>>(istream& is, user& s)
функция в порядке.Во второй раз, когда он вызывается, первый getline
завершится ошибкой, установив поток в плохое состояние (eof), следующие два getline
также не пройдут, и он вернет поток, и все работает отлично.Просто помните, что любая или все эти переменные могут содержать полную чушь, поскольку чтение не удалось.