函数返回但不执行我所要求的

时间:2019-05-10 14:44:59

标签: c

我有一项功课要做,这部分代码返回1,但不将m加到b。知道我想念什么吗?

int uj_esemeny(meccs m, bajnoksag b){
    int cs1l=0;
    int cs2l=0;
    int temp=0;
    int i;
    for(i=0;i<b.csapatsz;i++){
        if(b.csapatok[i].azon==m.cs1.azon||b.csapatok[i].azon==m.cs2.azon){
            temp++;
        }
    }
    if((b.csapatsz+temp)>6){ return 0;}
    for(i=0;i<b.jatszott;i++){
        if(b.meccsek[i].cs1.azon==m.cs1.azon && b.meccsek[i].cs2.azon==m.cs2.azon)
        {
            return 0;
        }
    }
    for(i=0;i<b.csapatsz;i++)
    {
        if(b.csapatok[i].azon==m.cs1.azon){cs1l++;}
        if(b.csapatok[i].azon==m.cs2.azon){cs2l++;}
    }
    if(cs1l>0&&cs2l>0){return 0;}
    b.csapatok[b.csapatsz++]=m.cs1;
    b.csapatok[b.csapatsz++]=m.cs2;

    b.meccsek[b.jatszott++]=m;
    return 1;
}
typedef struct
{
    char azon[10];
    int hasznos;
}csapat;

typedef struct
{
  csapat cs1;
  csapat cs2;
  int cs1gol;
  int cs2gol;
}meccs;

typedef struct
{
  meccs meccsek[30];
  csapat csapatok[6];
  int csapatsz;
  int jatszott;
}bajnoksag;

主要uj_esemeny(m01,b1)

小翻译: 这是关于一个足球锦标赛,其中存储了由团队参加的比赛,我们存储了团队,结果以及每个单独的比赛。

“ csapat”是团队 “ meccs”是匹配项 “bajnokság”是冠军 “ cs1”是team1 “ cs2”是team2 “ cs1gol”是team1得分 “ cs2gol”是team2得分

1 个答案:

答案 0 :(得分:3)

鉴于声明int uj_esemeny(meccs m, bajnoksag b)b按值传递给函数,这意味着只有调用者bajnoksag的副本传递给函数。

在该函数中,所有语句,例如b.meccsek[b.jatszott++]=m;仅更改副本。它们不会在调用例程中更改bajnoksag

要解决此问题,请将指针传递到bajnoksag

  • 将函数声明更改为int uj_esemeny(meccs m, bajnoksag *b)
  • 在函数内部,将b.更改为b->,以引用指向的结构而不是副本。
  • 在调用函数的地方,使用&传递bajnoksag的地址而不是副本的地址。