3
1 3 0 2 4 
0 4 1 3 2 
3 1 4 2 0 
1 4 3 0 2 
3 0 2 4 1 
3 2 4 0 1 
0 2 4 1 3

I have a matrix like this in a .txt file. Now, how do I read this data into a int** type of 2D array in best way? I searched all over the web but could not find a satisfying answer.

array_2d = new int*[5];
        for(int i = 0; i < 5; i++)
            array_2d[i] = new int[7];

        ifstream file_h(FILE_NAME_H);

        //what do do here?

        file_h.close();
burakongun
  • 221
  • 3
  • 6
  • 17

2 Answers2

6

First of all, I think you should be creating an int*[] of size 7 and looping from 1 to 7 while you initialize an int array of 5 inside the loop.

In that case, you would do this:

array_2d = new int*[7];

ifstream file(FILE_NAME_H);

for (unsigned int i = 0; i < 7; i++) {
    array_2d[i] = new int[5];

    for (unsigned int j = 0; j < 5; j++) {
        file >> array_2d[i][j];
    }
}

EDIT (After a considerable amount of time):
Alternatively, I recommend using a vector or an array:

std::array<std::array<int, 5>, 7> data;
std::ifstream file(FILE_NAME_H);

for (int i = 0; i < 7; ++i) {
    for (int j = 0; j < 5; ++j) {
        file >> data[i][j];
    }
}
user123
  • 8,613
  • 2
  • 25
  • 50
  • Thank you very much. " file >> array_2d[i][j]; " This line was all I have been asking for. – burakongun Mar 23 '13 at 16:24
  • 2
    @burakongun To add to Magtheridon's comment that the array should be structured (7 x 5) is because the is ordering of the array in the file is by line number and then by integer on each line (this logically matches the order in which the file is read in). If you use your original structure and loop from i=(0 to 4) and j=(0 to 6) with "file >> array2d[i][j]", you will not get a correct representation of your original array. You will instead get {{1,3,0,2,4,0,4},{1,3,2,3,1,4,2},{0,1,4,3,0,2,3},{0,2,4,1,3,2,4},{0,1,0,2,4,1,3}} which is not a valid representation of the 2D array in your question. – statueuphemism Mar 23 '13 at 16:32
3
for (int i = 0; i < n; i++) {
 for (int j = 0; j < n; j++) {
    int n;
    fscanf(pFile, "%d", &n);
    printf("(%d,%d) = %d\n", i, j, n);
    array[i][j] = n;
}

I hope it helped.

George Netu
  • 2,662
  • 4
  • 26
  • 49