C 函数返回,但不执行我要求的操作
我有一个家庭作业要做,这部分代码返回1,但不会将m添加到b。知道我错过了什么吗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){
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;