저는 Tic-Tac-Toe 게임을하고 있었고 제 입력 함수로 플레이어가 2 차원 배열에 정수로 저장하려고 한 움직임을 얻었습니다. 입력은 포인터의 1D 배열에 대한 참조를 사용하여 얻었습니다 2D 배열의 위치로 이동합니다.2D 배열에 대한 포인터의 1D 배열 사용?
하지만 내 문제는 포인터를 사용하여 다차원 배열의 사각형 값을 설정하는 것처럼 보이지만 아무런 문제가 발생하지 않는다는 것입니다.
void Game::input(Board b){
int *spots[9]; // Possible spots for the input
bool validInput = false;
spots[0] = &b.board[2][0];
spots[1] = &b.board[2][1];
spots[2] = &b.board[2][2];
spots[3] = &b.board[1][0];
spots[4] = &b.board[1][1];
spots[5] = &b.board[1][2];
spots[6] = &b.board[0][0];
spots[7] = &b.board[0][1];
spots[8] = &b.board[0][2];
redo:
cout << ">> " << endl;
int input; // Input
cin >> input; // Get the input
validInput = cin;
if(!validInput){
cout << "Numbers only please!" << endl;
cin.clear();
while(cin.get() != '\n');
goto redo;
}
if(input > 9 || input <= 0){
cout << "Invalid move!" << endl;
goto redo;
}
input--; // Subtract 1 for array location
if(*spots[input] != 0){
cout << "Square is already being used!" << endl;
goto redo;
}
*spots[input] = 1;
}
지금, I는 입력 번호 7 그것은 [0] [0] (1)에 단이 보이지 않는 b.board 설정해야한다고 : 여기
입력 함수 우연히 있다. 나중에 유닛 케이스를 실행할 때 보드 [0] [0]이 1로 설정되지 않은 것으로 보이며 배열에 반영되지 않습니다. 내가 포인터에 대해 뭔가를 망쳐 놓고 있니?
당신은 goto''을 통해 루프를 사용하는 습관을해야합니다
은 BTW, paranthesis 및 루프는 당신의 친구입니다. 또한, 당신은 참조로 보드를 통과하지 않을거야, 당신은 어떤 무작위로 복사 전달하고있어. – chris벡터,지도 또는 for-loop를 사용할 수 있습니까? – andre
절대로, 이건 해결되었습니다, 내가 참조 할 일을 놓친 것을 믿을 수 없어. – Annabelle