2014-06-24 1 views
1

C++의 2D 배열을 사용하여 스도쿠 격자를 맵핑하려고합니다. 2d 배열의 "덤프"와 입력을 비교하여 코드를 테스트했습니다. 배열은 9x9입니다. 문제는 처음 8 개 열이 모두 완벽하다는 것입니다. 그러나 마지막 열은 9 건 중 8 건에서 잘못된 것으로 보입니다. 왜 이것이 될 수 있을까요?2D Array와 관련된 문제

CODE :

#include <iostream> 
#include <fstream> 
#include <string> 

int i = 0; 
int j = 0; 
const char test[12] = {'e', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*'}; 
std::string abc = ""; 

// Class to map out a sudoku grid 
class grid { 

    public: 

    char board[8][8]; 

    void mapChars(std::string fileName) { 

      int x = 0; 
      int y = 0; 

      std::string line; 
      std::ifstream myfile (fileName.c_str()); 

      if (myfile.is_open()) { 
       while (getline(myfile,line)) { 
        for(std::string::size_type i = 0; i < line.size(); ++i) { 
         if(strchr(test, line[i]) != NULL){ 
          if (line[i] == 'e') { 
           y++; x=0; 
          } else { 
            board[y][x] = line[i]; 
            x++; 

          } 
         } 
        } 
       } myfile.close(); 
      } 
    } 

    void dumpMap() { 
     while(j < 9){ 
      while(i < 9){ 

      std::cout << board[j][i] << ' '; 
      ++i;    

      } 
      std::cout << std::endl; 
      ++j; 
      i = 0; 
     } 
    } 
} sudoku; 

int main() { 

    sudoku.mapChars("easy1.map"); 
    sudoku.dumpMap(); 
    std::cin >> abc; 
    return 0; 

} 
+3

'9x9' 어레이로 스도쿠 보드를 정의해야합니까? –

+2

"배열은 9x9"O RLY입니까? –

+0

@ wolfPack88이 설명하기를, 나는 선언과 색인 생성 사이에 혼란 스러웠다. – Rhys

답변

5

는 현재 8 (8)에 의해 배열을 선언 : char board[8][8]. 9 9로 지정하려면 char board[9][9]을 사용하십시오. 나는 당신이 색인과 함께 선언을 혼동 한 것 같아요. char board[8][8]을 선언하면 board에는 0..7과 유사한 두 번째 인덱스에서 실행되는 첫 번째 인덱스가 있습니다.

오류 대신 값 출력을 얻는 이유는 아웃 오브 바운드 (out of bound) 액세스의 출력이 정의되지 않았기 때문입니다. 코드가 board[i][j]에 액세스하려고하면 실행 파일은 ij에 대해 지정한 값을 사용하여 데이터를 검색 할 메모리 부분을 결정합니다. ij이 범위를 벗어난 경우 실행 파일은 실제적으로 board과 연관되지 않은 메모리를 인쇄하고 실제로 발생한 가비지 값입니다.

+0

Ach ... 그런 루키 실수. 그래서 실제로 어떻게 값이 반환 되었습니까? – Rhys

+0

정의되지 않은 동작입니다. 나는 그것을 조금 더 설명하기 위해 나의 대답을 편집 할 것이다. – wolfPack88