将64 * 64个整数从文件存储到2D数组

时间:2016-10-10 19:46:32

标签: c++ arrays

如果我有一个64 * 64整数表的文件。 (第一个64将是第0行;接下来的第64个将是第1行,依此类推......)。如何将该表存储到2D数组中。 这是我的代码

 #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {   
        ifstream infile;
        infile.open("table.txt");
        if (infile.fail())
        {
            cout << "could not open file" << endl;
            exit(6);
        }
        int array[63][63];      
        while (!infile.eof())
        {
            infile >> array[63][63];
        }
        cout << array[63][63] << endl;
        return 0;
    }

执行此操作时,我只会得到&#34; 1&#34;

2 个答案:

答案 0 :(得分:1)

  

我有一个64 * 64整数表的文件(...)如何存储   那个表变成了2D数组?

首先,你必须声明一个正确大小的数组(好吧,你应该考虑使用std::vectorstd::array,但是你要求使用2D数组:

const size_t size = 64;
int array[size][size];

然后你必须在一个循环中分配它的每个元素。在您的代码中,您重复写入元素array[63][63],它也在您分配的范围之外,因为您将数组声明为int array[63][63]。请记住,数组indeces从0开始,因此如果为63 int s分配足够的内存,则只有0到62之间的indeces有效。

完成此任务的可能方法是:

for ( size_t i = 0; i < size; ++i )
{
    for ( size_t j = 0; j < size; ++j )
    {
        if ( !(infile >> array[i][j]) )
        {
            std::cerr << "Too few elements were read from file\n";
            exit(7);
        }
    }
}

答案 1 :(得分:0)

不是将文件中的值分配到数组[63] [63],而应将其分配给一个元素并增加索引以填充整个数组:

int x = 0; int y = 0;
while (!infile.eof())
{
    infile >> array[x++][y];
    if (x > 63)
    {
         x = 0;
         y++;
    }
}

这些方面应该有效。

另外,如上所述,数组需要初始化为int array [64] [64]。