Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的梦想和获得线_C++_Istream - Fatal编程技术网

C++ 我的梦想和获得线

C++ 我的梦想和获得线,c++,istream,C++,Istream,所以我试图创建一个函数来验证一个文件,但是我不明白为什么我的变量在我得到linep_之后都是空的,team 该文件在第1行包含曲棍球的名称,之后是一个名和姓的列表,如下所示: TeamName FirstName1 LastName1 FirstName2 LastName2 FirstName3 LastName3 我就是这么做的: 在我看来: ifstream myfile ("example.txt"); bool test = util::validateFile(myfile);

所以我试图创建一个函数来验证一个文件,但是我不明白为什么我的变量在我得到linep_之后都是空的,team

该文件在第1行包含曲棍球的名称,之后是一个名和姓的列表,如下所示:

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();
}