2012-08-16 68 views
0

我一直在研究一个随机数gen,创建6个唯一的随机数1-49,我可以得到它的工作,所以theres 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]); 

尺寸定义为6

感谢

+0

任何崩溃日志?什么样的崩溃? – elyashiv 2012-08-16 14:35:16

+0

如果rand()返回0 j评估为50.数字[]只是SIZE长,所以... – 2012-08-16 14:36:00

回答

5

尺寸定义为6

所以,你的阵列numbers就像

int numbers [6]; 

一旦

j = rand() % 49 + 1; 

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

n = numbers[j]; 
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; 
} 

我希望这有助于。