我尝试使用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);
}
答案 0 :(得分: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("");
}
答案 1 :(得分: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()
,代码永远不会进入循环。
答案 2 :(得分:1)
将push_back
用于thetext
向量
您正在对空矢量进行索引
while(getline(inFile, line)) {
theText.push_back(line);
theText.push_back("\n");
}
同时从for循环中删除!it->empty()
for (auto it = theText.begin(); it != theText.end() ; ++it)
cout << *it << endl;
使用-std=c++0x
或-std=c++11
选项进行编译。