随机数生成器帮助不生成随机数 - 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);
}
答
我所做的是删除了原来为范围切换它更简单的方程,然后我在主要添加了种子生成器。
#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 –
可能的重复[为什么我总是得到随机数的序列与rand()?](http://stackoverflow.com/questions/1108780/why-do-i-always-get-the-same - 随机数序列与随机数) – Blastfurnace
请在搜索之前询问。 –