2013-03-23 6 views
1
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 

.txt 파일에 이와 같은 행렬이 있습니다. 이제이 데이터를 가장 좋은 방법으로 int** 유형의 2D 배열로 읽는 방법은 무엇입니까? 웹 전체를 검색했지만 만족스러운 답변을 찾을 수 없었습니다.텍스트 파일에서 2D 정수 배열로 행렬 읽기 C++

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(); 

답변

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; 
} 

는 나는 그것이 도움이되기를 바랍니다.

+0

을 - 1 for : completelly 괴괴 망측 한 Google 연결, 이것은 코멘트이어야하고 그 (것)들 응답해야한다 * 유용한 통보를 포함해야한다. –

+0

이들은 실제로 내가 필요로하는 것에 비해 너무 복잡합니다. 그러나 어쨌든 고마워. – burakongun

+0

그리고 늦어서 죄송합니다. –

5

우선, 루프 내에서 5의 int 배열을 초기화하는 동안 int*[] 크기를 만들고 1에서 7까지 반복해야한다고 생각합니다. 이 경우

, 당신은이 작업을 수행 할 것입니다 :

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]; 
    } 
} 

편집을 (상당한 시간 후) :
를 다른 방법으로, 나는 vector 또는 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]; 
    } 
} 
+0

대단히 고마워요. "file >> array_2d [i] [j];"이 줄은 제가 요구했던 전부입니다. – burakongun

+2

@burakongun 배열에 구조가 있어야한다는 Magtheridon의 의견 (7 x 5)을 추가하려면 파일의 배열 순서가 줄 번호와 각 줄의 정수가되어야합니다 (논리적으로는 파일을 읽습니다). "file >> array2d [i] [j]"로 i = (0에서 4)와 j = (0에서 6)까지의 원래 구조와 루프를 사용하면 원래 배열을 올바르게 표현할 수 없습니다. 대신에 {{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}}입니다. 이것은 귀하의 질문에서 2D 배열의 유효한 표현이 아닙니다. 그것을 설명하기 위해 – statueuphemism

+0

^+1. –

관련 문제