C ++随机数1,0不起作用

时间:2012-11-20 13:16:50

标签: c++ visual-c++

我试图将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?谢谢。

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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个元素。

答案 2 :(得分:0)

const int arr_size = 19;
char row1[arr_size];

for (int i = 0; i < arr_size; ++i) {
    row1[i] = rand() % 2 ? 'O' : 'X';
}