在C ++中再次运行时,rand()不会更改值

时间:2013-11-06 12:33:27

标签: c++ c

当我再次运行可执行文件时,我正在创建一个函数来生成不同的随机值。这是我的第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;
}

5 个答案:

答案 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()根据前一个值在每个呼叫中​​计算一个新值。