为什么rand每次在c ++中都会产生相同的值?

时间:2016-04-14 03:25:23

标签: c++ random

我有代码

char a = 97 + rand() % 26;
char b = 97 + rand() % 26;
char c = 97 + rand() % 26;
char d = 97 + rand() % 26;
char e = 97 + rand() % 26;
char f = 97 + rand() % 26;

在我的程序中,在主文件中,当我执行文件时,每次都得到序列lvqdyo,当我假设它每次都会随机化。无论是否答案,任何见解都将受到赞赏。

3 个答案:

答案 0 :(得分:4)

首先使用srand()初始化随机种子。 当前时间可以用来做同样的事情:

#include <cstdlib> // this is where srand() is defined
#include <ctime> // this is where time() is defined
srand (time(NULL));
char a = 97 + rand() % 26;
...

参考this

这样的随机种子确保每次对rand()的调用都会产生一个随机数。

答案 1 :(得分:2)

要使用for(int i = 0; i < phoneBook.size(); i++) your printing ,您必须先播种,请参阅下面的示例

rand()

/* rand example: guess the number */ #include <stdio.h> /* printf, scanf, puts, NULL */ #include <stdlib.h> /* srand, rand */ #include <time.h> /* time */ int main () { int iSecret, iGuess; /* initialize random seed: */ srand (time(NULL)); /* generate secret number between 1 and 10: */ iSecret = rand() % 10 + 1; do { printf ("Guess the number (1 to 10): "); scanf ("%d",&iGuess); if (iSecret<iGuess) puts ("The secret number is lower"); else if (iSecret>iGuess) puts ("The secret number is higher"); } while (iSecret!=iGuess); puts ("Congratulations!"); return 0; } 确保种子正在启动,以便srand(time(NULL))可以正常运行

阅读来源: CPP - Rand()

答案 2 :(得分:1)

这是因为Random 非常随机。它是一个相当随机,取决于种子

对于一个随机种子,您有一个随机序列的精确集。这就是为什么每次运行程序时得到相同结果的原因,因为一旦编译,随机种子就不会改变

为了使您的应用程序在每次运行时都具有随机行为,请考虑将时间信息用作随机种子:

#include <cstdlib.h>
#include <time.h>

....
srand (time(NULL)); //somewhere in the initialization    

time(NULL)是随机种子,它将根据您运行应用程序的系统时间而变化。然后,您可以每次使用不同随机种子的rand()

//somewhere else after initialization
char a = 97 + rand() % 26;
char b = 97 + rand() % 26;
char c = 97 + rand() % 26;
char d = 97 + rand() % 26;
char e = 97 + rand() % 26;
char f = 97 + rand() % 26;