为什么我一直为播放器和电脑获得相同的随机数?

时间:2017-04-14 02:25:37

标签: c random

我不明白为什么我一直得到相同的随机数    播放器和电脑。我正在掷骰子两次,一次是玩家,然后是电脑,我是通过一个叫做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;


}

1 个答案:

答案 0 :(得分:2)

rand()通常使用随机数生成器...它不是真正随机的,它只是给出一个看似随机的数字序列(通过一系列调用) 。 srand()&#34;种子&#34;它,基本上决定了序列的起始位置。因此,如果您使用相同的种子,则会得到相同的序列。

由于您一起拨打roll_a_dice()两次,time(NULL)通常会为两次通话提供相同的结果(因为它们可能在同一秒内),因此您使用相同的值重新种植每次都得到相同的数字(该序列中的第一个)。

在您第一次拨打rand()之前,您只需要播种一次。再次调用srand()会根据您传递的种子值不必要地重新启动数字序列。