-1

我需要将文本文档的每一行存储到一个向量中。但是,我尝试的任何文件文本,输出始终是 2 行。第一个是空的,第二个总是输出:“DONE”。我在 Windows7 X64 上,使用 VC++2013。

我已经尝试解决这个问题好几个小时了。我尝试了许多不同的方法,但结果保持不变。我怀疑“DONE”是 getline() 的返回值,但是我不明白我的代码不能正常工作。

int main() {

    ifstream hFile("test.txt");

    vector<string> lines;
    string line;
    while (std::getline(hFile, line))
        lines.push_back(line);

    cout << lines[1];

    hFile.close();

    getchar();
    return 0;
}

编辑:从编译文件夹执行程序时它工作正常,但在 VC++ 的调试控制台中却不行...

4

2 回答 2

1

该程序看起来大部分是正确的。唯一的问题是您的代码假定文件中至少有两行:如果行数很少,例如,只有一行或无法打开文件,则声明

cout << lines[1];

导致未定义的行为。您的意思是打印文件的每一行而不是第二行吗?

根据对行为的描述,我怀疑您的文件要么包含字符串DONE,要么您实际上正在执行不同的程序!

于 2013-11-09T19:40:21.673 回答
0

小心,它不能证明行数:

cout << lines[1];

用于line.size()计算读取的行数。事实上,对于只有一行的文件,访问第二项是未定义的行为。

于 2013-11-09T19:38:52.760 回答