【问题标题】:C++ Random Number 1,0 Not WorkingC++ 随机数 1,0 不工作
【发布时间】:2012-11-08 13:39:51
【问题描述】:

我正在尝试将 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?谢谢。

【问题讨论】:

  • for (int i = 0; i &lt; 19; i++) 中不是 20,而是 19。
  • @user1477388 int array[n]; 的有效索引是 0 到 n-1
  • 不,你想太多了,row1[19] 给你 19。
  • @user1477388 声明一个数组 row1[19] 会创建一个包含 19 个元素的数组。这些可在索引 0 - 18 处访问。您在数组声明中的括号中输入的是数组的 元素数

标签: c++ visual-c++


【解决方案1】:
const int arr_size = 19;
char row1[arr_size];

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 啊,我现在明白了。它只是数字到 18,而不是 19。我通常在问问题后不会感到愚蠢,但这一个让我感到愚蠢......
    【解决方案3】:

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

    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 个元素。

    【讨论】:

    • 谢谢,这很简单,而且我以前做过。我没想到在这里应用它。好电话。
    猜你喜欢
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多