从文件读入数组C ++

时间:2014-06-13 17:07:24

标签: c++ arrays file

我一直在尝试执行从文件中读取一行文本并将其保存到数组中的相对简单的任务。不幸的是,这只是没有工作,而简单的程序根本没有读取任何东西。这是我试图使用的那种代码:

ifstream in_stream;
int x=0;
string array[150]
in_stream.open("file.txt");

while(!in_stream.eof()){
    in_stream>>array[x];
    x++;
}

我也试过使用getline,如下所示:

ifstream in_stream;
int x=0;
string array[150]
in_stream.open("file.txt");

while(!in_stream.eof()){
    getline(in_stream, array[x]);
    x++;
}

两种模式都不起作用,也不会将任何内容读入数组,而是将其留空... 我只是不确定出了什么问题,所以如果有人可以提供帮助,那就太棒了!

2 个答案:

答案 0 :(得分:1)

在尝试从中读取文件之前检查文件是否已成功打开非常重要,如果文件未能打开则不会开始填充数组。

正如christianm所说,最好使用std :: vector,因为它允许你处理任何大小的文件。因此,我的建议是按如下方式重构您的代码:

std::ifstream in_stream("file.txt");

if(!in_stream.good())
{
    std::cerr << "Error opening file!" << std::endl;
    //More error handling code goes here
}

std::vector<std::string> lines;
while(!in_stream.eof())
{
    std::string line;
    std::getline(in_stream, line);
    lines.push_back(line);
}

std::cout << "Read: " << lines.size() << " lines." << std::endl;

要记住ifstream的一件事是它会打开你传递给它的字符串作为测试用例中的相对路径。这意味着您必须从包含file.txt的同一目录启动程序,在程序启动后更改工作目录,或者提供完全限定的路径。

答案 1 :(得分:0)

看,这是我的file.txt的内容:

ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi

完全10行

这是存储在size == 20的数组中的数据:

ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi

也是10行!

如果使用getline,每行将存储在数组中的一个位置。如果文件的大小不够大和/或数组的大小太大,则只会看到打印出来的空白区域。首先,确保您的阵列足够短或文件的大小足够大。无论如何,getline的解决方案可以工作。我没有测试ifstream的解决方案,但案例与第一个类似。

希望它有所帮助!