C++随机生成数

C++随机生成数,c++,random,multidimensional-array,C++,Random,Multidimensional Array,我正忙于一个游戏,需要在二维数组中随机放置一个数字。我该怎么做 我有 for(int i = 0; i < rows; i++) { for(int j = 0; j < cols; j++) { array[1 + rand() % row][1 + rand() % col] == 5; } } 我的程序在运行时崩溃了。可能是什么问题?数组[1+rand%row][1+rand%col] 不正确,因为第一个元素位于位置0,而不是1 尝试数组[ran

我正忙于一个游戏,需要在二维数组中随机放置一个数字。我该怎么做

我有

for(int i = 0; i < rows; i++)
{
   for(int j = 0; j < cols; j++)
   {
      array[1 + rand() % row][1 + rand() % col] == 5;
   }
}
我的程序在运行时崩溃了。可能是什么问题?

数组[1+rand%row][1+rand%col]

不正确,因为第一个元素位于位置0,而不是1

尝试数组[rand%row][rand%col]

编辑: rand%n返回从0到n-1的数字。在您的例子中,添加1可以尝试访问位置行或列处的元素,这是无效的索引。即使你写了

数组[1+rand%row-1][1+rand%col-1]


它不是真正随机的,因为第一行和第一列都永远不会被触及。

如评论中所述,数组是以零为基础的,因此您可以生成[0,n-1]范围内的数字

此外,您正在进行比较,而不是指定注释==

此外,使用更现代的随机生成器,它们不仅在生成正确分布的意义上更好,而且更易于使用,无需更多的算术运算。例如,使用,您将拥有以下功能,这也可以通过For pre-c++03实现:

std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<> disRows(0, rows-1);
std::uniform_int_distribution<> disCOls(0, cols-1);
for(int i = 0; i < rows; i++)
{
   for(int j = 0; j < cols; j++)
   {
      array[disRows(gen)][disCols(gen)] = 5;
   }
}

此外,双循环在这里没有多大意义,如果您想随机分配5'N'次,只需从0到N的循环就可以是rows*cols

显示数组的声明。数组是基于0的,而不是基于1的。此外,您使用的是==而不是assignment=这只是一个输入错误,还是您的真实代码?而赋值是迭代rows*cols次,因此,你将得到一个随机数为5的矩阵。这些循环没有意义,你甚至不为每个单元格使用i和j,而是选择另一个随机单元格。问题是如何在数组中的随机位置放置值5。如果rand%row返回row-1,则1+rand%row为row,是的,我知道了,它现在没有给我错误,它没有在屏幕上显示5array@JonathanGeers当前位置查看我的答案或阅读关于您的问题的第三条评论,您使用==代替=