我正在尝试使用array[3][3]
将1-9
的值随机化为rand()
,然后将int解析为字符以放入数组中。
#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-9
后,X
或O
将被放置在(bboard)随机单元格中,为您赢取额外的机会。我尝试了各种方法,但没有编译过。这个方法编译,但是我得到了一个我以前没有遇到的错误,也没有找到问题。我已尝试将ROW
,COL
和bboard
的声明移到main
但仍无法进行编译。该程序将在2
之外的2D
硬编码main
数组中运行,但rand()
要求它在main
之内?
JGrasp编译但是当我运行代码时会发生以下错误:
----jGRASP wedge: process died on signal 8.
----jGRASP: operation complete.
答案 0 :(得分:0)
问题在于rand() % i*COL
排在bboard[i][j] = char (rand() % i*COL+j+1);
行,这会产生divide-by-zero
错误的情况。
您可以看到here生成的数字如下:
0
0
0
3
3
3
6
6
6
要更正,您可以在(rand() % i*COL+j+1);
行中使用(rand() % (i*COL+j+1));
或 (rand() % (i*COL+1)+j+1);
更改部分bboard[i][j] = char (rand() % i*COL+j+1);
(更符合您的需要)。