【发布时间】:2016-01-22 00:50:55
【问题描述】:
我编写了一个程序,它应该绘制一个矩形并在该矩形中创建一些随机点。用户将定义矩形的宽度(作为 X)和长度(作为 Y)以及他/她想要在矩形中创建的点数(作为 n)。我在创建点时遇到问题,我使用 srand 创建随机点,但它创建的点比预期的要少。例如,如果 n=3,它会创建 2 个点。我以前没用过srand。 这是导致问题的代码:
void create_mines(int x,int n)
{
int i, random;
srand(time(0));
for (i = 0; i < n; i++)
{
random = rand() % (x);
board[random][i] = '*';
}
}
怎么了?
【问题讨论】:
-
您应该尝试在每一步打印出
random的值,以查看您是否遇到了冲突。 “随机”不是意味着均匀分布。如果您想要精确地获得n不同的点,您可以考虑用n点预先填充板,然后使用随机算法重新分配它们。 -
如果
random值超出 0...(x-1) 的范围,那么程序将有未定义的行为。如果n值超出 0...(y-1) 的范围,则程序将具有未定义的行为。建议:1)添加代码来检查限制 2)使用另一个调用rand()而不是使用i来索引数组。 3) 将y值作为参数传递给函数。 4)random是一个众所周知的函数名,它与#include <stdlib.h>语句一起被引入代码(连同srand()和rand()函数),因此不应用作变量名。 -
rand() % (x)怎么会落在 0..x-1 之外?这不是模数的定义吗?
标签: c visual-studio-2012