-1

我正在尝试将 X 或 O 放入数组中。但是,它似乎不起作用。它说,“运行时检查失败 #2 - 变量 'row1' 周围的堆栈已损坏。”

char row1[19];
char row2[19];
char row3[19];
char row4[19];

for (int i = 0; i < 20; i++)
{
    int r = int(((double) rand() / (RAND_MAX)) + 1);

    if (r == 0)
    {
        row1[i] = 'X';
    }
    else
    {
        row1[i] = 'O';
    }

}

cout << row1[0] << endl;

如何生成随机 X 或 O?谢谢你。

4

3 回答 3

3

正如 elmigranto 所说:您的循环不正确。它应该是:

for (int i = 0; i < 19; i++)

那是因为char row4[19];是一个包含 19 个元素的数组。第一个元素是row4[0],最后一个是row4[18]因为编号是从0开始的。所以在最后一个循环中row[19]会导致错误。

于 2012-11-20T13:24:20.213 回答
1

如果你想抛硬币,你可以做类似的事情

char row1[20];
char row2[20];
char row3[20];
char row4[20];

for (int i = 0; i < 20; i++)
{
    int r = rand() % 2;

    if (r == 0)
    {
        row1[i] = 'X';
    }
    else
    {
        row1[i] = 'O';
    }

}

虽然我不知道您的代码中的 row2 - row4 是什么。堆栈损坏发生在 row1[19] 上,因为您只指定了 19 个元素,但 0..19 表示需要 20 个元素。

于 2012-11-20T13:23:49.863 回答
0
const int arr_size = 19;
char row1[arr_size];

for (int i = 0; i < arr_size; ++i) {
    row1[i] = rand() % 2 ? 'O' : 'X';
}
于 2012-11-20T13:33:06.017 回答