c++ - cout空的时候有两个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
() 方法。
推荐阅读
- amazon-web-services - AWS 颁发的 SSL 证书存储在服务器的什么位置,以便我可以将 Neo4J 定向到它们?
- python - 如何创建一个元素为正弦波而另一个元素为余弦波的二维张量?
- c++ - 使用 struct 和列表库 c++ 创建的列表之间的区别
- javascript - 无法在带有动态值的下拉列表中选择选项,使用 codeceptjs 和 javascript
- vhdl - ALU 32 位,溢出,零标志
- laravel - ->where('id', '<>', $id) 中的 '<>' 有什么用
- powershell - test batch statements directly in powershell without wrapping the call in a batch file
- python - 如何使用 BeautifulSoup 仅提取给定类或标签内的文本?
- typescript - Typescript knex:无法读取未定义的属性“客户端”
- java - Java:仅打印字符串中的唯一字符