为什么int上的返回值是相同的?

时间:2017-04-28 11:01:06

标签: c++ c srand

S,我正在根据随机值创建一些游戏。这个游戏应该通过插入一个团队的玩家的统计数据和另一个团队的组合等来预测足球比赛将如何结束。投入游戏统计数据的球队将增加竞争对手的数据。玩家的原始统计数据将除以2并放在概率栏的边缘,如果该值接触将考虑得分的团队统计数据,但如果它在中间则会变为平局。

这是代码

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

int score_prob(int x,int hh, int aw);

int main()
{
    int i,j,k,a,b,c,n,sc,shome=0,saway=0;
    int p[64][64],x,y,z,ho,aw;
    int t[64],h,w,sem,tand;

    printf("Number Of Team  : ");scanf("%d",&x);
    printf("Number Of Player: ");scanf("%d",&y);

    for(i=0;i<x;i++)
    {
        z = 0;
        printf("\n\n");
        printf("Teamm %d \n",i+1);
        for(j=0;j<y;j++)
        {
            printf(". PLayer %d : " ,(j+1));scanf("%d",&p[i][j]);
            z += p[i][j];
        }
        printf("Stat of team %d = %d",i+1,z);
        t[i] = z;
    }
    srand(time(NULL));

    do
    {
        k = 0;
        printf("\n\n");
        printf("Home Team Number: ");scanf("%d",&a);a = a - 1;
        printf("Away Team Number: ");scanf("%d",&b);b = b - 1;
        for(i=0;i<90;i++)
        {
            i += 4;
            printf("\nMinute %d: ",i+1);
            {
                sem  = t[a] + t[b];
                ho=t[a];aw=t[b];

                sc = score_prob(sem,ho,aw);
                printf("\n              %d\n",score_prob(sem,t[a],t[b]));
                if(sc == 0)
                {
                    shome += 1;
                    printf("Home Score\n");printf(" %d VS %d ",shome,saway);
                }else if(sc == 2)
                {
                    printf(" %d VS %d ",shome,saway);
                }
                else{
                    saway += 1;
                    printf("Away Score\n");printf(" %d VS %d ",shome,saway);
                }
            }
        }
    }while(k == 0);
    return 0;
}

int score_prob(int x,int hh, int aw)
{
   int st,aa,nn,sr=0,sh=0,sa=0,home,away;
   time_t t;
   sh=0;sa=0;
   aw = aw / 2; hh = hh / 2;
   srand((unsigned) time(&t));

   for(nn=0;nn<x;nn++)
   {
        aa = rand() % x;
        if(aa<hh)
        {
            sh += 1;
        }
        if(aa>(aa - aw))
        {
            sa += 1;
        }
        if(aa!=(aa<hh) && aa != (aa<(aa-aw)))
        {
            sr +=1;
        }
   }

   if(sr != 0)
   {
       if(sh<sa)
       {
           st = 1;
       }
       else
       {
           st = 0;
       }
   }
   else
   {
       st = 2;
   }

   return st;
}

2 个答案:

答案 0 :(得分:2)

随机数不是很随机=)有些表有伪随机数,当你调用srand()时,你只需选择其中一个表。之后,rand()的每次调用都会从所选表中获取一些数字。因此,如果您使用相同的种子多次调用srand(),您将会反复获得相同的表格。

答案 1 :(得分:1)

rand秘密地&#39;一个递归函数(Linear congruential generator种)。这意味着前一个调用的结果被用作下一个调用的输入。由于它将此先前值存储在静态变量中,因此您需要在首次调用rand之前自行设置它。

您可以在运行时多次重置它,但是由于您可能在同一秒内多次调用srand((unsigned) time(&t));,因此该值似乎不变。