2017-12-11 1 views
0

1-9을 사용하여 2D array[3][3]을 무작위로 추출한 다음 rand()을 사용하여 int를 구문 분석하여 배열에 배치합니다.무작위로 추출한 2D 배열

#include <cstdlib> 
#include <ctime> 
#include <iostream> 
#include <cmath> 
#include <iomanip> 

using namespace std; 

void showgame(); 
void player(); 
bool gameover(); 

char player1, player2; 
char user; 
bool tie = false; 
const int ROW = 3; 
const int COL = 3; 
int bboard[ROW][COL]; 

char aboard[3][3]= {{'1', '2', '3'}, 
        {'4', '5', '6'}, 
        {'7', '8', '9'}}; 

int main() 
{ 

unsigned seed = time(0); 
srand(seed); 

for(int i=0; i<ROW; i++) 
    for(int j=0; j<COL; j++) 
     bboard[i][j] = char (rand() % i*COL+j+1); 

결과는 하드 코딩 된 tictactoe 보드와 무작위 보드가됩니다. (aboard) 셀을 선택한 경우 1-9X 또는 O은 임의의 셀에 배치되어 우승 확률을 높입니다. 나는 이것을하는 다양한 방법을 시도했지만 아무도 컴파일하지 않았다. 이 방법은 컴파일되지만 이전에 발생하지 않은 오류가 발생하지도 않으며 문제를 찾을 수 없습니다. ROW, COLbboard의 선언을 main에 옮겨 보려고했지만 여전히 컴파일 할 수 없습니다. 이 프로그램은 main 외부의 2D 하드 코드로 실행되지만 rand()main 내에 있어야합니까?

----jGRASP wedge: process died on signal 8. 
----jGRASP: operation complete. 

답변

0

문제는이 divide-by-zero 오류의 시나리오를 생성 라인 bboard[i][j] = char (rand() % i*COL+j+1);rand() % i*COL 부분이다 : 나는 다음과 같은 오류가 발생 코드를 실행하면

JGrasp 그러나 컴파일합니다.
당신은 번호가 생성 here은 다음과 같습니다 볼 수 있습니다

0 
0 
0 
3 
3 
3 
6 
6 
6 

은 당신이 부분을 (rand() % i*COL+j+1);을 변경할 수 있습니다 해결하려면 라인 bboard[i][j] = char (rand() % i*COL+j+1);에서 (더 나은 사용자의 요구에 맞는 중) (rand() % (i*COL+j+1));또는(rand() % (i*COL+1)+j+1);.