我正在尝试在C编程中创建一个“游戏”,为用户抛出2个骰子,为PC投掷2个骰子,并且获得更大金额的人获胜, 当我在visual studio中调试它时,我在变量值和控制台窗口中看到了良好的结果,但是当我在没有调试用户和PC的情况下运行它时,它们总是得到相同的骰子值(用户获得2和2,并且例如,PC获得2和2。
任何人都可以解决吗?我看了过去3个小时,我发现问题无法解决。
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int throwDice();
int diceSum();
int main()
{
int res1;
res1=diceSum();
if(res1==0)
printf("It is a tie!\n");
if(res1==1)
printf("You Won!\n");
if(res1==-1)
printf("You Lost\n");
}
int throwDice()
{
int i;
srand((unsigned)time(NULL));
i = (rand()%(6-1)) + 1;
return i;
}
int diceSum()
{
int j,a=0,b,c=0,d=0;
int array[4];
for(j=1;j<=2;j++)
{
array[c]=throwDice();
a=a+array[c];
c++;
}
for(b=1;b<=2;b++)
{
array[c]=throwDice();
d=d+array[c];
c++;
}
printf("You got %d and %d.\nYour opponent got %d and %d.\n",array[0],array[1],array[2],array[3]);
if(a==d)
return 0;
if(a>d)
return 1;
else
return -1;
}
答案 0 :(得分:4)
每次拨打throwDice
时,您都会使用当前时间重新初始化随机数生成器。
时间的准确性只有1秒,所以在这个程序的一次运行中,时间不会改变,所以你会得到相同的结果。
>>
>>“使用相同种子的两个不同初始化将在随后的rand调用中生成相同的连续结果。”
答案 1 :(得分:1)
随机数生成器不仅仅是随机抽取随机数。当你种下它时,你给它一个很好的数字开始,从那里它可以生成一堆随机数。
问题是,它会给你一系列随机数,但是如果你连续两次给它一个相同的种子,那个序列就是一样的。这就是为什么你种下它的价值相对随机的重要性。嘿,时间非常随机,两个人在同一时间最终运行程序的机会是多少?
你正在做的是在每次调用rand
之前播种发生器,而不是在开始播种并让随机数发生器完成它的工作。由于time
仅以秒为单位返回时间(请参阅man page),因此每次循环运行时都会得到相同的数字,直到下一秒的开始。