C++ 两个函数在同一个fstream对象c++;

C++ 两个函数在同一个fstream对象c++;,c++,getline,C++,Getline,我有以下问题。我有这两个功能。第一个是从txt文件中读取联系人信息,联系人之间用符号“#”分隔,如下所示- //sample txt file #1 Name: AAA Phone: 08782634 Phone: 0245637 Date: 23.34 Phone: 324324324 #2 Name: BBB Phone: 99999 它会找到每个触点的长度(每个“#”之间的线数)。 第二个调用第一个,然后打印联系人,但它打印第二个联系人,而不是第一个联系人 第一个函数的getline是否

我有以下问题。我有这两个功能。第一个是从txt文件中读取联系人信息,联系人之间用符号“#”分隔,如下所示-

//sample txt file
#1
Name: AAA
Phone: 08782634
Phone: 0245637
Date: 23.34
Phone: 324324324
#2
Name: BBB
Phone: 99999
它会找到每个触点的长度(每个“#”之间的线数)。 第二个调用第一个,然后打印联系人,但它打印第二个联系人,而不是第一个联系人

第一个函数的getline是否可能会以某种方式改变流,因为第二个函数在没有第一个函数的情况下可以完美地工作(将核心容量转换为常量int)

int Contact::findnumberofields(std::ifstream&in)
{
char*buffer=新字符[1024];
int-cnt=0;
int i=0;
int pos=0;
当
{
in.getline(缓冲区,1024);
if(strchr(缓冲区“#”))
{
while(在.getline(缓冲区,1024)中)
{
如果(!strhr(缓冲区,#')和&strlen(缓冲区))
{
cnt++;
}
其他的
{
返回cnt;
}
}
}
}
in.clear();
in.close();
删除[]缓冲区;
}
void Contact::ReadContactFromStream(std::ifstream&in)
{
设定容量(FindNumberOfFields(英寸));
//cout=硬内核int(5)和从代码中删除SetCapacity(in)
{
打破
}
contactTypes[addedFields]=CreateObjectFromLine(在中);
addedFields++;
}
}
所有文件都有一个“当前读取位置”,当您从文件中读取时,该位置是高级的。除非您总是读取文件中的下一个内容,此时
“#2”
是下一条记录

我建议您解决这个问题,只需要有一个函数来读取数据,当它涉及到一个新的记录标记时,它会初始化一个空字符串,并将记录行读入这个向量,然后将这个向量传递给一个解析内容的函数

类似于以下伪代码:

std::getline(stream, line);
for (;;)
{
    if (line is start of record)
    {
        std::vector<std::string> current_record;
        while (std::getline(stream, line))
        {
            if (line is start of record)
                break;  // Break out of inner loop
            else
                current_record.push_back(line);
        }

        parse_record(current_record);
    }
}
std::getline(流,行);
对于(;;)
{
if(行是记录的开始)
{
std::矢量电流记录;
while(std::getline(流,行))
{
if(行是记录的开始)
中断;//中断内部循环
其他的
当前_记录。向后推_(行);
}
解析_记录(当前_记录);
}
}

什么是“硬芯容量”?您可以使用重置文件中的读取位置。in.参见KG(0)帮助!非常感谢你!在计算每个触点的长度后,您需要在该文件流中倒带当前位置指示器!
std::getline(stream, line);
for (;;)
{
    if (line is start of record)
    {
        std::vector<std::string> current_record;
        while (std::getline(stream, line))
        {
            if (line is start of record)
                break;  // Break out of inner loop
            else
                current_record.push_back(line);
        }

        parse_record(current_record);
    }
}