将元素添加到数组中时如何解决错误

时间:2018-12-10 02:53:01

标签: c++ multidimensional-array

我正在尝试使用一种已经使用并且证明是成功的方法将元素添加到我的文件中,但是现在当我这样做时,我得到了我想要的数字以及一堆其他不需要的数字在我的文件中,没有任何意义

const int MAX_SIZE = 21;

int readSquare(int square[MAX_SIZE][MAX_SIZE], string inputFileName){ //reads file into an array

    int value;

    ifstream inFile;
    inFile.open(inputFileName);

    if (inFile) //if the input file to be read open successfully then goes on
    {
        int temp;
        inFile >> temp;

        if (temp>21) {
            temp=21;
        }
        for (int i = 0; i < MAX_SIZE; i++)
        {
            for(int j = 0; j < MAX_SIZE; j++)
            {
                inFile >> square[i][j];
            }
        }

    } else {
        inFile.close();
        return 0; //returns 0 if couldnt open file
    }
    inFile.close();

    cout << "Magic square" << endl;
    for(int i=0;i<MAX_SIZE;i++)
    {
        for(int j=0;j<MAX_SIZE;j++)
        {
            cout << square[i][j] << " ";
        }
        cout<<endl;
    }
    return 1;
}

这是我在代码中使用的文件

3
4 9 2
3 5 7
8 1 6

这是我得到的结果(持续了一段时间,但我只获得了顶部)

4 9 2 3 5 7 8 1 6 16840768 6619136 6643024 23198772 0 1942212500 127 917504 6643024 786434 6643032 0
65536 30 0 31 0 13930549 30 593 6619744 6619744 -2 127 46 6420808 1997546816 -1759127226 -2 6420704 1997359545 4096 4104
0 6420680 6634144 6619136 6421232 4104 6619744 0 3 0 4096 6420732 1997535944 6420804 655612 655360 2 9 0 2 6420976
0 1997378284 6420976 663276 1952 229640288 663200 655360 0 1997377793 6421060 661336 9 16777596 0 13080 236 661336 2 16777596 -530786634

1 个答案:

答案 0 :(得分:1)

@melpomene的帽子提示,以处理主要评论中的详细信息。

操作,您要遍历数组的整个范围,无论输入数据是否可用。我建议您执行以下操作,以使结果在外观上减少随机性:

  • 将2D数组中的值初始化为零。
  • 将输入样本限制为期望的数量,并且在任何一个维度中都不要超过数组的大小。

在您的帖子中,您将在输入文件的第一行中显示3的值。这是什么意思-3行,3个样本或3行中的每行3个样本?

由于输入文件每行有3个样本,所以我猜数据文件中的初始值代表每行的样本,其中每行的值分配给单独的 inner 数组。

在不偏离您的帖子的情况下,请考虑以下因素:

// clear the array for easier diags
for (int n = 0; n < MAX_SIZE; n++)
  for (int m = 0; m < MAX_SIZE; m++)
    square[n][m] = 0;

int cols;

inFile >> cols; // first line of data file indicating the samples in each row

if (cols > MAX_SIZE) // don't exceed the size of the inner array
  cols = MAX_SIZE;

for (int i = 0; i < MAX_SIZE; i++)
{
    for(int j = 0; j < cols; j++)
    {
        if (!(inFile >> square[i][j])) //  read until EOF
        {
          i = MAX_SIZE; // force outer loop to terminate since break only affects the inner loop.
          break;
        }
    }
}

请参见How does ifstream's eof() work?