我想键入一些“简单”的代码搞乱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,但它一直在发生。
答案 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;
}