istream并得到线

时间:2014-04-10 00:59:58

标签: c++ istream

所以我正在尝试创建一个验证文件的函数,但是在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 个答案:

答案 0 :(得分:0)

第一次firstname为空(阅读team并交替firstnamelastname后),函数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();
}