我不明白为什么我一直得到相同的随机数 播放器和电脑。我正在掷骰子两次,一次是玩家,然后是电脑,我是通过一个叫做roll_a_dice的函数来做的。
Plz忽略了他们的其他变量 与我的问题无关。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int roll_a_dice (void);
int main(int argc, const char * argv[]) {
int round=1, playerScore, playerTotal, computerScore, computerTotal;
int player, computer;
do{
printf("Welcome to the Yacht game.\nLets see who is lucky!\n");
player=roll_a_dice ();
computer=roll_a_dice ();
printf("Player: %d – Machine: %d\n",player, computer);
}while (player!=computer||computer!=player);
while(round!=12){
round++;
}
return 0;
}
int roll_a_dice (void){
srand(time(NULL));
return 1 + rand() % 6;
}
答案 0 :(得分:2)
rand()
通常使用伪随机数生成器...它不是真正随机的,它只是给出一个看似随机的数字序列(通过一系列调用) 。 srand()
&#34;种子&#34;它,基本上决定了序列的起始位置。因此,如果您使用相同的种子,则会得到相同的序列。
由于您一起拨打roll_a_dice()
两次,time(NULL)
通常会为两次通话提供相同的结果(因为它们可能在同一秒内),因此您使用相同的值重新种植每次都得到相同的数字(该序列中的第一个)。
在您第一次拨打rand()
之前,您只需要播种一次。再次调用srand()
会根据您传递的种子值不必要地重新启动数字序列。