Доберись до линии
Поэтому я пытаюсь создать функцию, которая проверяет файл, но я не могу понять, почему все мои переменные пусты после того, как я getline(p_is, team);
Файл содержит в строке 1 имя хоккея, после этого список имен и фамилий, например:
TeamName
FirstName1
LastName1
FirstName2
LastName2
FirstName3
LastName3
Вот что я делаю:
В моем основном:
ifstream myfile ("example.txt");
bool test = util::validateFile(myfile);
и это моя функция (базовая версия):
bool validateFile(std::istream& p_is)
{
string team = "";
string firstname = "";
string lastname = "";
getline(p_is, team);
while (!p_is.eof()){
getline(p_is, firstname);
if (firstname.empty())
{return false;}
getline(p_is, lastname);
if (lastname.empty())
{return false;}
}
if (team.empty())
{return false;}
else
{return true;}
Когда я отлаживаю i, он возвращает false, потому что команда пуста... В моем основном я могу напечатать, чтобы утешить поток, и это нормально, и я также попытался восстановить мой.txt, если он был поврежден
любая идея?
РЕДАКТИРОВАТЬ: я добавляю p_is.peek(); и теперь он входит в цикл while, но все еще пуст, мой getline в порядке?
1 ответ
Первый раз firstname
пусто (после прочтения team
и чередуя firstname
а также lastname
), функция validateFile
возвращается false
, Таким образом, вы можете решить проблемы:
bool validateFile(std::istream& p_is) {
string team, firstname, lastname;
getline(p_is, team);
while( p_is ) {
if( !getline(p_is, firstname) )
return !team.empty();
if( firstname.empty() )
return false;
if( !getline(p_is, lastname) )
return !team.empty(); // this could be false;
if( lastname.empty() )
return false;
}
return !team.empty();
}