我正在制作一个类似于游戏代码破坏者或Mastermind的小型C程序。到目前为止这是我的代码。到目前为止它所做的只是生成一个“随机”代码并打印代码数组。每次编译它时,它都会生成相同的2,2,6,3数组。任何人都可以帮我一个真正的随机数发生器吗?
#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);
}
答案 0 :(得分:7)
答案 1 :(得分:1)
真正的随机发电机价格昂贵
rand()函数生成一个看似随机的序列,但它总是相同的
这条线
srand(time(NULL));
只会将其初始化为某个值,这个值很可能每次都不同,这样就可以得到你想要的东西
对于游戏来说,这可能已经足够了。如果你需要更进一步,并有一个更随机的序列,你可以尝试根据用户输入生成一些东西,如击键时间,鼠标移动和时间。
如果没有专门的硬件,那就差不多了。
答案 2 :(得分:0)
我所做的是删除了我最初用于范围的等式,将其切换为更简单的东西然后我在main中添加了种子生成器。
#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);
}