2012-10-03 296 views
3

我正在製作一個小型C程序,以類似於遊戲代碼斷言器或Mastermind。這是我的代碼到目前爲止。到目前爲止,它所做的只是生成一個「隨機」代碼並打印代碼數組。每次我編譯它時,它都會生成相同的2,2,6,3數組。任何人都可以幫助我有一個真正的隨機數生成器?隨機數生成器幫助不生成隨機數 - C

#include<stdio.h> 
#include<math.h> 
#include<stdlib.h> 
#include<time.h> 
#define CODELENGTH 4 
#define NUMSYMBOLS 6 
const int LOW = 1; 
const int HIGH = 6; 




void genCode (int MasterCode[]) 
{ 
int i=0; 
int k; 
while (i < 4){ 

MasterCode[i] =rand() %(HIGH-LOW+1)+LOW; 
    i++; 

}//end while loop. 
for (k = 0 ; k < 4; k++) { 
    printf("%d ", MasterCode[ k ]); 
} 

printf("\n"); 
    } 





void getGuess (int guess[]) 
{ 
int b[ 4 ]; 
int number = 0; 

printf("Please enter your list of 4 numbers between 1 and 6: "); 
int j; 
int k; 
for (j = 0 ; j < 4; j++) { 
    scanf("%d", &number); 
    b[ j ] = number; 
} 

printf("Your array has these values: "); 

for (k = 0 ; k < 4; k++) { 
    printf("%d ", b[ k ]); 
} 

printf("\n"); 
} 




int main (int argc, char **argv) 
{ 
int MasterCode[4]; 
genCode(MasterCode); 



} 
+2

可能的重複[爲什麼我總是得到隨機數的序列與rand()?](http://stackoverflow.com/questions/1108780/why-do-i-always-get-the-same - 隨機數序列與隨機數) – Blastfurnace

+1

請在搜索之前詢問。 –

回答

7

您需要在使用rand()之前播種隨機數發生器。可here

srand(time(NULL)); 

的更多信息:這通常是爲完成。

+0

謝謝我在C參考網站上查找rand函數,那是我的問題。謝謝 –

0

我所做的是刪除了原來爲範圍切換它更簡單的方程,然後我在主要添加了種子生成器。

#include<stdio.h> 
#include<math.h> 
#include<stdlib.h> 
#include<time.h> 
#define CODELENGTH 4 
#define NUMSYMBOLS 6 




void genCode (int MasterCode[]) 
{ 
int i=0; 
int k; 
while (i < 4){ 

MasterCode[i] =rand() %6 +1; 
    i++; 

}//end while loop. 
for (k = 0 ; k < 4; k++) { 
    printf("%d ", MasterCode[ k ]); 
} 

printf("\n"); 
} 





void getGuess (int guess[]) 
{ 
int b[ 4 ]; 
int number = 0; 

printf("Please enter your list of 4 numbers between 1 and 6: "); 
int j; 
int k; 
for (j = 0 ; j < 4; j++) { 
    scanf("%d", &number); 
    b[ j ] = number; 
} 

printf("Your array has these values: "); 

for (k = 0 ; k < 4; k++) { 
    printf("%d ", b[ k ]); 
} 

printf("\n"); 
} 




int main (int argc, char **argv) 
{ 
srand (time(NULL)); 
int MasterCode[4]; 
genCode(MasterCode); 



} 
1

真正的隨機發生器是昂貴的。
rand()函數生成一個看似隨機的序列,但它總是相同的。

srand(time(NULL));
只會初始化這個到一定值時,將每一次最有可能是不同的,它會給你想要的東西。
對於一款遊戲來說,這可能就足夠了。如果您需要更進一步,並且具有更隨機的序列,您可以嘗試根據用戶輸入生成一些內容,例如按鍵時間,鼠標移動和時間。
即使沒有專門的硬件,也可以達到最接近的效果。

+1

在srand(time(NULL))和用戶輸入之間存在密碼質量的僞隨機生成器。 http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator –