所以我正在尝试创建一个验证文件的函数,但是在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好吗?
答案 0 :(得分:0)
第一次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();
}