随机数生成器帮助不生成随机数 - C

问题描述:

我正在制作一个小型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

请在搜索之前询问。 –

您需要在使用rand()之前播种随机数发生器。可here

srand(time(NULL)); 

的更多信息:这通常是为完成。

+0

谢谢我在C参考网站上查找rand函数,那是我的问题。谢谢 –

我所做的是删除了原来为范围切换它更简单的方程,然后我在主要添加了种子生成器。

#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); 



} 

真正的随机发生器是昂贵的。
rand()函数生成一个看似随机的序列,但它总是相同的。
线
srand(time(NULL));
只会初始化这个到一定值时,将每一次最有可能是不同的,它会给你想要的东西。
对于一款游戏来说,这可能就足够了。如果您需要更进一步,并且具有更随机的序列,您可以尝试根据用户输入生成一些内容,例如按键时间,鼠标移动和时间。
即使没有专门的硬件,也可以达到最接近的效果。

+1

在srand(time(NULL))和用户输入之间存在密码质量的伪随机生成器。 http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator –