有两条getline时cout为空?

Cout empty when there are two getline?

我正在尝试计算我的数组,但每当我尝试时它总是显示为空。

int array_size = 0;
int pos;
string line;

ifstream inFile;
string filename = 'test.txt';
inFile.open(filename);

for(array_size = 0; getline(inFile, line); array_length++);

string * array_holder = new string[array_size];

while(getline(inFile, line))
{
    array_holder[pos++] = line;
}

printArray(array_holder, array_size);

打印数组

void printArray(string * data, int x)
{
    for(int z = 0; z < x; z++)
        cout << data[z] << endl;
}

当我注释掉这一行时:

for(array_size = 0; getline(inFile, line); array_length++);

printArray 会显示里面的所有内容。

但是当我取消注释该行时,它只显示空行(取决于数组大小)。

我认为这是由于双 getline?我需要清除 getline 缓冲区还是什么?除了 cin 之外,我找不到有关 getline 缓冲区的任何详细信息。或者这是内存问题?

请注意,在我的情况下我不能使用矢量,我需要读取文本文件中的总行数才能将数组大小解析为我的数组语法。

谢谢。

for(array_size = 0; getline(inFile, line); array_length++);

此循环读取 inFile,一次一行,直到到达文件末尾。

本次循环结束后,整个文件被读取完毕。毕竟,这正是您的程序告诉计算机要做的:一次读取一行,递增计数器,直到 getline 失败,这发生在文件末尾。但是紧接着,第二个循环尝试继续从文件中读取:

while(getline(inFile, line))

然而,由于已经到达文件末尾,这立即失败,什么也没有发生。

您显然想从头开始重新阅读文件。然而,计算机编程的黄金法则指出“您的计算机将始终完全按照您的指示执行,而不是您希望它执行的操作”。你没有告诉你的电脑回到文件的开头,所以它没有理由这样做。因此,您只需通过关闭并重新打开文件或使用 seekg() 方法告诉您的计算机执行此操作。