我有一项功课要做,这部分代码返回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得分
答案 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
的地址而不是副本的地址。