2012-08-16 105 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; 
} 

我希望這有助於。