我一直在研究一个随机数gen,创建6个独特的随机数1-49,我可以使它工作,所以6个随机数1-49,或6个独特的随机数,但不是以上所有的同时。我可以编译代码,但每次尝试在不同的地方使用% 49 +1
时它都会崩溃。
我使用的代码是:
{
int numbers [SIZE];
int i, j, n;
srand (time(NULL));
for (i = 0; i < SIZE; i++)
numbers[i] = i;
for(i = 0; i < SIZE; i++)
{
j = rand() % 49 + 1;
n = numbers[j];
numbers[j] = numbers[i];
numbers[i] = n;
}
for (i = 0; i < SIZE; i++)
MyOutputDebugString ("%d\n", numbers[i]);
SIZE定义为6。
由于
答案 0 :(得分:5)
SIZE定义为6。
因此,您的数组numbers
就像
int numbers [6];
一次
j = rand() % 49 + 1;
执行,j
介于[1; 49],所以,如果它是&gt; 5,在这一行,你将有一个超出范围索引::
n = numbers[j];
答案 1 :(得分:0)
错误来自调用不存在的数组的一部分。
n = numbers[j];
j的值将是您的随机数,最可能大于您的SIZE。
更改代码的这一部分:
for (i = 0; i < SIZE; i++)
numbers[i] = i;
for(i = 0; i < SIZE; i++)
{
j = rand() % 49 + 1;
n = numbers[j];
numbers[j] = numbers[i];
numbers[i] = n;
}
您可以设法在一个循环中实现相同的效果,如下所示:
for (i = 0; 1 < SIZE; i++)
{
numbers[i] = rand() % 49 + 1;
}
我希望这会有所帮助。