如果我有一个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;
答案 0 :(得分:1)
我有一个64 * 64整数表的文件(...)如何存储 那个表变成了2D数组?
首先,你必须声明一个正确大小的数组(好吧,你应该考虑使用std::vector
或std::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]。