C 函数返回,但不执行我要求的操作

C 函数返回,但不执行我要求的操作,c,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){

我有一个家庭作业要做,这部分代码返回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;
}
主要
uj_esemeny(m01,b1)

小翻译: 这是一个足球锦标赛,它存储由球队进行的比赛,我们存储球队、结果和每一场比赛

“csapat”是一个团队 “MECC”是一种匹配 “Bajnoksaág”是冠军 “cs1”是团队1 “cs2”是团队2 “cs1gol”是团队1的分数
“cs2gol”是team2得分

如果声明
intuj_esemeny(meccs m,bajnoksag b)
b
通过值传递给函数,这意味着只有调用方的
bajnoksag
的副本传递给函数

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

要解决此问题,请将指针传递给一个
bajnoksag

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

请阅读以下内容:
b
通过值传递给此函数,这意味着:调用方的
b
参数将不会更改。如果曾经有一个用调试器解决问题的例子,那就是它。我们怎么知道它“被要求”做什么呢?@EricPostpischil他的观点是,如果
csapatok
meccsek
是动态指针而不是固定数组,那么即使
b
通过值传递,它也可以(也将)修改主机数据。当然,对
csapatsz
jatszott
成员的更改将不会保留,这使得这个小宝石的工作流程完全中断,但它仍然不是完全不可能的。没有类型数据(理想情况下是一个)永远不会知道,实际上只是猜测。@EricPostphil我同意。标量成员显然不会被保留,而且可能是关键的。至少这是一个bug。序列成员中的数据是否被保留(有意或无意)取决于我们没有的类型信息。不管怎样,结果都是我们知道的成员不会被结转,而其他成员可能会被结转。无论如何,此代码已被破坏。它可以工作,但测试使用的是
uj_esemeny(m01,b1)
而不是&b1是否可以不引用?@DoppelG:C有指针
&b1
b1
的地址;它是指向
b1
@DoppelG的指针。您是说不允许将调用此函数的代码更改为读取
uj_esemeny(m01,&b1)吗
相反?@zwol这正是我想要的meant@DoppelG如果你不能改变调用这个函数的代码,那么你在C.做的事情是不可能的,C++是可能的,但是这是一个不同的编程语言,这个程序应该在C++中完全不同的写。你需要和你的导师谈谈,了解他们实际期望你做什么。
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;