C++ 我的梦想和获得线
所以我试图创建一个函数来验证一个文件,但是我不明白为什么我的变量在我得到linep_之后都是空的,team 该文件在第1行包含曲棍球的名称,之后是一个名和姓的列表,如下所示:C++ 我的梦想和获得线,c++,istream,C++,Istream,所以我试图创建一个函数来验证一个文件,但是我不明白为什么我的变量在我得到linep_之后都是空的,team 该文件在第1行包含曲棍球的名称,之后是一个名和姓的列表,如下所示: TeamName FirstName1 LastName1 FirstName2 LastName2 FirstName3 LastName3 我就是这么做的: 在我看来: ifstream myfile ("example.txt"); bool test = util::validateFile(myfile);
TeamName
FirstName1
LastName1
FirstName2
LastName2
FirstName3
LastName3
我就是这么做的:
在我看来:
ifstream myfile ("example.txt");
bool test = util::validateFile(myfile);
这是我的functionbasic版本:
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;}
当我调试时,它返回false,因为团队为空。。。
在我的主要功能中,我可以打印来控制流,这是正常的,我还试图重做我的.txt文件,以防它被破坏
有什么想法吗
编辑:我添加p_is.peek;现在它进入while循环,但我的getline是否仍然为空?在读取team并交替使用firstname和lastname后,firstname第一次为空时,函数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();
}