我已经构建了一个填充了随机数的2D-array
。我希望在1
到7
之间生成随机数,每个都有一对。但我不确定为什么有些数字只生成一个数字。我附上以下示例。
这是我的代码:
int gameboard(char box[9][9])
{
int x, y;
for(x = 0; x < 9; x++)
{
for(y = 0; y < 9; y++)
{
box[x][y] ='_';
}
}
for(x = 0; x < 9; x++)
{
box[0][x]='#';
box[x][8]='#';
box[x][0]='#';
box[8][x]='#';
}
}
void rnum(char box[9][9])
{
int r1,r2,r3,r4,x;
char r='1',num;
srand( (unsigned) time(NULL));
for(x=0;x<7;x++)
{
r1 = 1 + rand()%7;
r2 = 1 + rand()%7;
r3 = 1 + rand()%7;
r4 = 1 + rand()%7;
box[r1][r2]= r + x;
box[r3][r4]= r + x;
}
}
答案 0 :(得分:1)
每个号码都会在您的代码中放置两次。但是你不在乎数字是否覆盖已经放置的另一个数字。您必须检查是否尚未选择地点。
for(x=0;x<7;x++)
{
do
{
r1 = 1 + rand()%7;
r2 = 1 + rand()%7;
} while(box[r1][r2] != '_');
box[r1][r2]= r + x;
do
{
r3 = 1 + rand()%7;
r4 = 1 + rand()%7;
} while(box[r3][r4] != '_');
box[r3][r4]= r + x;
}
对未来的建议:使用调试器来发现这种麻烦。调试器对于逐步运行程序并观察每个变量的值非常有用。