我有代码
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,当我假设它每次都会随机化。无论是否答案,任何见解都将受到赞赏。
答案 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;