C++随机数1,0不工作

C++随机数1,0不工作,c++,visual-c++,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';

我试图在数组中放入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?谢谢。

如果你想掷硬币,你可以这样做

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';
    }

}

虽然我不知道第2行-第4行在代码中的作用。第1行[19]发生堆栈损坏,因为您只指定了19个元素,但0..19表示需要20个元素。

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

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

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

不是20,而是19 in,表示int i=0;i<19;i++.@user1477388 int数组[n]的有效索引;是0对n-1。我就把它放在这里:不,你想得太多了,行1[19]给你19。@user1477388声明数组行1[19]会创建一个包含19个元素的数组。可通过索引0-18访问这些。在数组声明的括号中放的是数组的元素数。谢谢,这很简单,我以前也做过。我不想在这里应用它。好主意。啊,我现在明白了。它只是数字到18,而不是19。问了问题后我通常不会觉得自己很笨,但这一次让我觉得自己很笨。。。
const int arr_size = 19;
char row1[arr_size];

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