C Yahtzee模拟器在Windows中使用疯狂的卷,而不是在Linux中

时间:2015-10-11 23:31:52

标签: c linux random seed

我想键入一些“简单”的代码搞乱rand和srand函数,我试图编写一个Yahtzee卷的模拟器。它会随机滚动5个骰子,如果它们匹配,它会打印出你有一个Yahtzee以及需要多少次重新滚动来获得它。我在Windows上的Ubuntu VM中输入了这个。工作正常并获得合理的结果(1到4000之间)的重卷。但是,当我将相同的代码添加到Windows时,它总是花费50万美元来重新获得Yahtzee。为什么会这样?这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
    int dice1, dice2, dice3, dice4, dice5, count=0, e=1;

    while(e==1){
        srand(time(NULL)+rand());
        dice1 = rand () % (6) + 1;

        srand(time(NULL)+rand());
        dice2 = rand () % (6) + 1;

        srand(time(NULL)+rand());
        dice3 = rand () % (6) + 1;

        srand(time(NULL)+rand());
        dice4 = rand () % (6) + 1;

        srand(time(NULL)+rand());
        dice5 = rand () % (6) + 1;

        if(dice1 == dice2 && dice2 == dice3 && dice3 == dice4 && dice4 == dice5){
            printf("\tYAHTZEE! of %i's\n\tIt took %i rolls\n", dice1, count);
            if(count >= 2920) printf("+++LESS THAN A 10%% CHANCE!+++\n");
            count = 0;
            scanf("%i", &e);
        } else count++;
    }

    return 0;
}

我试图只使用第一个srand,但它一直在发生。

1 个答案:

答案 0 :(得分:0)

一秒钟,time(NULL)将返回相同的号码。相同的种子将产生相同系列的随机数。作为第一个陈述之一,请致电srand(time(NULL))

#include <stdio.h> 
#include <stdlib.h>
#include <time.h>

int main(void){
    int dice1, dice2, dice3, dice4, dice5, count=0, e=1;

    srand(time(NULL));//call here outside loop so it isn't called again too soon
    while(e==1){
        dice1 = rand () % (6) + 1;
        dice2 = rand () % (6) + 1;
        dice3 = rand () % (6) + 1;
        dice4 = rand () % (6) + 1;
        dice5 = rand () % (6) + 1;
        if(dice1 == dice2 && dice2 == dice3 && dice3 == dice4 && dice4 == dice5){
            printf("\tYAHTZEE! of %i's\n\tIt took %i rolls\n", dice1, count);
            if(count >= 2920) printf("+++LESS THAN A 10%% CHANCE!+++\n");
            count = 0;
            scanf("%i", &e);
        } else count++;
    }
    return 0;
}