-5

我正在尝试使用 getline 从文件中读取行,然后显示每一行。但是,没有输出。输入文件是 lorem ipsum 虚拟文本,每个句子都有新行。这是我的代码:

#include <vector>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

int main() {

    string line;
    vector<string> theText;
    int i = 0;
    ifstream inFile("input.txt");

    if(!inFile)
        cout << "Error: invalid/missing input file." << endl;
    else {
        while(getline(inFile, line)) {
            theText[i] = line;
            theText[i+1] = "";
            i += 2;
        }

        //cout << theText[0] << endl;
        for (auto it = theText.begin(); it != theText.end() && !it->empty(); ++it)
            cout << *it << endl;
    }
    return (0);
}
4

3 回答 3

2
vector<string> theText;
...
while(getline(inFile, line)) {
    theText[i] = line;
    theText[i+1] = "";
    i += 2;
}

第一行声明一个空向量。要向其中添加项目,您需要调用push_back(),而不是简单地分配给它的索引。分配给超出向量末尾的索引是非法的。

while(getline(inFile, line)) {
    theText.push_back(line);
    theText.push_back("");
}
于 2013-08-19T21:35:22.913 回答
2
vector<string> theText;

声明一个空向量。

theText[i] = line;

尝试访问向量中不存在的元素。

就像std::vector::operator[]文档中所说的那样:

返回对指定位置 pos 的元素的引用。不执行边界检查。

因此,即使您访问向量的不存在元素(索引超出范围),您也不会出现任何错误(除非可能是段错误......)。

您应该使用std::vector::push_back将元素添加到向量:

while(getline(inFile, line)) {
    theText.push_back(line);
    theText.push_back("");
}

除了问题:

你可以&& !it->empty()从最后一个循环中删除,它没用。如果向量为空,则begin()返回end()并且代码永远不会进入循环。

于 2013-08-19T21:39:02.873 回答
1

用于矢量push_back_thetext

您正在对空向量进行索引

   while(getline(inFile, line)) {

        theText.push_back(line);
        theText.push_back("\n");
    }

!it->empty()从 for 循环中删除

    for (auto it = theText.begin(); it != theText.end() ; ++it)
        cout << *it << endl;

-std=c++0x使用or-std=c++11选项编译。

于 2013-08-19T21:36:05.473 回答