当我再次运行可执行文件时,我正在创建一个函数来生成不同的随机值。这是我的第0次和第1位的功能。第一次,我运行它并得到输出是0 1 1 1.我运行.exe输出与先前时间相同。怎么了?我再次跑步时想要不同的输出。你能救我吗?
int randBit()
{
int bit;
double randval;
randval = (double)rand()/(double)RAND_MAX;
if(randval<0.5) bit=0;
else bit=1;
return bit;
}
答案 0 :(得分:4)
以下是使用<random>
标题的解决方案。
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist (0,1);
int random_number = dist(mt);
每次需要新的随机数时,请致电dist(mt)
。
答案 1 :(得分:2)
您需要{main}中的srand
功能。
随着时间推移播种:
#include <time.h> //header for time
int main(){
srand(time(NULL)); // call only once and preferably at the start of main
// your code including the function randBit()
return 0;
}
以下是示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randBit()
{
int bit;
double randval;
randval = (double)rand()/(double)RAND_MAX;
if(randval<0.5) bit=0;
else bit=1;
return bit;
}
int main(){
srand(time(NULL));
int i=0,random=0;
for(i=0;i<100;i++){
random = randBit();
printf("%d ",random);
}
printf("\n");
return 0;
}
这是输出:
Notra:Desktop Sukhvir $ ./test
1 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 1
答案 2 :(得分:0)
您需要在srand()
第一次通话前致电rand()
。对于Windows,您可以使用:
srand( GetTickCount() );
与平台无关的变体:
srand( time(NULL) );
答案 3 :(得分:0)
从联系手册:
rand()函数返回0范围内的伪随机整数 到RAND_MAX包含。
这意味着rand
实际上并不会在每次调用时生成随机值,而是将种子作为初始值并基于该种子生成伪随机值。使用特定种子,rand()
的每个调用序列都将提供相同的“随机”数字序列。
可以使用srand()
函数初始化种子,并且在每次执行中使用不同的生成数序列的好方法是使用time(NULL)
作为种子。
请注意,您只需要初始化种子一次,因此您可以决定在程序的main
功能中执行此操作。
干杯。
答案 4 :(得分:0)
C中的rand()
函数是伪随机,因此需要种子。此种子可以是任意数字,但通常是当前时间,传感器数据或其他任何可预测的。
种子具有默认值,每次运行程序时都会产生相同的“随机”数字序列。要设置种子,您可以使用srand()
函数,例如srand(time(NULL))
,将当前时间用作种子。从种子计算随机值,因此rand()
根据前一个值在每个呼叫中计算一个新值。