我有一个文件指针的问题。由于某种原因,我无法找到使其遍历并输出document.txt中的每个单词的方法。所有这一切都是输出相同的变量内容,即相同的单词,甚至跳过第一个单词。(因此它会反复输出第二个单词并在遍历后停止)
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
vector<string> myVector;
vector<string>::iterator it;
ifstream docFile("document.txt");
string inputline;
getline( docFile, inputline);
string word;
while(!docFile.eof())
{
int i = 1;
docFile >> word;
myVector.push_back(word);
cout<<myVector[i]<<endl;
// char c = getc(docFile);
// if(c == '\n')
// ++linecount;
// cout<<linecount<<endl;
++i;
}
}
注释代码只是我试图在每次遍历每一行时增加行数。
答案 0 :(得分:0)
int i = 1;
docFile >> word;
myVector.push_back(word);
最初,myVector
为空,push_back()
将第一个单词添加到向量中。如您所知,数组索引从0开始,因此第一个单词将进入myVector[0]
。
cout<<myVector[i]<<endl;
由于i
为1,因此会尝试打印myVector[1]
而不是myVector[0]
。实际上,由于myVector[1]
不存在,现在这是未定义的行为,并且可能是崩溃。您声称没有崩溃并继续执行;这仍然属于&#34;未定义的行为&#34;,所以让我们继续。
在循环的下一次迭代中,将执行相同的四行代码。第二个单词现在被push_back()
加入myVector[1]
。 <{1}}再次初始化为1,i
被打印。
在循环的下一次迭代中,将执行相同的四行代码。第三个单词现在被myVector[1]
加入push_back()
。 myVector[2]
再次被初始化为1,i
被打印而不是myVector[1]
。
在循环的下一次迭代中,将执行相同的四行代码。第四个单词现在被myVector[2]
加入push_back()
。 myVector[3]
再次被初始化为1,i
被打印而不是myVector[1]
。
等等,等等。在循环的每次迭代中,下一个单词都会添加到向量中,但因为myVector[3]
每次都被初始化为1,并且i
会显示出来。
myVector[1]
绝对没有任何意义。因为i++
在循环内声明,当循环运行到结尾时i
被破坏,并且在循环的下一次迭代中,i
再次初始化为1。
要修复错误,需要在循环外声明i
,并将其初始化为0,而不是1。