1

我有一个接受动态多维数组(初始化为 0)作为参数的函数,并且我试图在我的函数中修改数组中的某些值。

接受数组作为参数的函数应该模拟两个骰子的滚动并将频率分布输出到我创建的初始化为零的数组。

它的代码如下:

#include <iostream>
#include <cstdlib>

using namespace std;

int** rollDie(int numRolls, unsigned short seed, int** &rollarray)
{
srand(seed);
int side1, side2;
while (numRolls > 0)
{
side1 = 1 + rand() % 6;
side2 = 1 + rand() % 6;

rollarray[side1][side2]++;

numRolls--;
}
return rollarray;

}

int** initializeArray(void)
{
    int i, j;
    int** m = new int*[6];

    for (i = 0; i < 6; i++)
        m[i] = new int[6];

    for (i = 0; i < 6; i++)
        for (j = 0; j < 6; j++)
            m[i][j] = 0;

    return m;
}

int main()
{
int numRolls;
unsigned short seed;
int ** a = initializeArray();


cout << "rolls?\n";
cin >> numRolls;

cout << "seed?\n";
cin >> seed;
int ** b = rollDie(numRolls, seed, a);

int i,j;
for (i = 0; i < 6; i++) {
    for (j = 0; j < 6; j++) {
        cout << b[i][j];
    }
    cout << "\n";
    }

}
4

2 回答 2

1

代码对我来说只有几个问题(我不得不猜测你是如何定义a的。下次也添加):

在打印中,您应该在每个数字后打印一个空格(次要)

在随机中,您选择索引为1+rand()%6,因此从 1 到 6,但是当您打印时,您将索引从 0 到 5!所以你的第一行和第一列将是 0。

除此之外,它似乎工作。

于 2013-07-19T01:34:27.173 回答
0

只有当一个人去做别的事情时,答案才会浮现在脑海中。我怀疑您将 a 声明为:

int a[6][6];

这是一个由 36 个整数组成的数组。但是,在您的函数中,您将 rollarray 声明为指向整数指针数组的指针。您需要做的就是将函数签名更改为:

int* rollDie(int numRolls, unsigned short seed, int* rollarray)

正如 cluracan 所说,您还想使用 0 到 5 范围内的数组索引。

无论是明智地使用打印语句还是使用调试器单步执行以查看实际情况,这都是一个很好的案例。

于 2013-07-19T02:01:04.733 回答