如何使用C ++读取文本文件的各行

时间:2014-10-01 16:48:18

标签: c++

好的,所以它已经有一段时间了,因为我搞砸了阅读和写作文件,我几乎忘记了我所学到的一切。因此,我目前只是想弄清楚如何从文本文件中读取特定行并将该行输出到命令提示符中。这是我的代码,我遇到了问题:

#include <iostream>
#include <fstream>
using namespace std;

int main(){
ifstream input;
int lineN=0;
string line[lineN];
input.open("input.txt");

getline(input, line[lineN]);
cout << line[lineN];
}

就目前而言,它会读取文本文件的第一行没问题。但是,如果我将变量lineN(代表行号)更改为1以读取第二行,则会使提示崩溃。我不知道我做错了什么。我试过研究这个问题,但是每个人的回答都太模糊了(那或者我太愚蠢了)。如果你能帮助我,那就太好了。

2 个答案:

答案 0 :(得分:3)

问题是你在这里定义一个空的字符串数组,而数组不是动态的:

int lineN=0;
string line[lineN];

当您将lineN更改为1时,数组中没有任何变化,您将会越界!

更好的方法是使用vectors

vector<string> line;  

读入一个临时字符串:

string current_line;  
getline(input, current_line);

并将其添加到您的矢量:

line.push_back(current_line); 

将所有这些放在一个很好的循环中会更有用:

 string current_line; 
 while (getline(input, current_line)) {
        line.push_back(current_line); 
 }

您可以稍后使用line[i]完全使用您的数组访问任何行,只要i< line.size()。或者您可以通过其所有内容轻松迭代:

 for (string x : line)  {    // means for every x in line[]
     cout<< x<<endl; 
 }  

答案 1 :(得分:1)

你分配一个大小为0的数组......

你会发现在这里可以找到的答案: C++ new int[0] -- will it allocate memory?