0

我一直在研究一个随机数生成器,它创建了 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。

谢谢

4

2 回答 2

5

SIZE 定义为 6。

所以,你的数组numbers就像

int numbers [6];

一次

j = rand() % 49 + 1;

被执行,j会在[1; 49 ],所以,如果它 > 5,在这一行上,你将有一个超出范围的索引::

n = numbers[j];
于 2012-08-16T14:35:18.197 回答
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;
}

我希望这有帮助。

于 2012-08-16T15:16:30.650 回答