我正在进行多米诺骨牌游戏,当用户向左侧添加多米诺骨牌时,会添加多米诺骨牌,但是当功能退出时,添加的多米诺骨牌就是GONE。
供参考:
opcionesCorrectas(Domino)包含正确的多米诺骨牌选择
opcionFitxa(int)包含播放器的选择
tNode* ultimaFitxa = (tNode *)malloc(sizeof(tNode)); ultimaFitxa->info.inferior = opcionesCorrectas[opcionFitxa - 1].inferior; ultimaFitxa->info.superior = opcionesCorrectas[opcionFitxa - 1].superior; ultimaFitxa->info.pos = opcionesCorrectas[opcionFitxa - 1].pos; ultimaFitxa->seg = fitxesJoc; fitxesJoc = ultimaFitxa;
功能标题
unsigned int demanar_fitxa_tirar(tJugador *jugador, tNode* fitxesJoc, tPartida *partida, tPila* fitxesBarrejades, bool primerCop)
调用函数
resultado = demanar_fitxa_tirar(&Jugadors[jugadorActual], fitxesJoc, partida, fitxesBarrejades, true);
这样我就把多米诺骨牌放在其他多米诺骨牌的顶部。
答案 0 :(得分:4)
您的问题是demanar_fitxa_tirar
的最后一行:
fitxesJoc = ultimaFitxa;
分配给局部变量,该变量对调用代码没有影响。您需要将指针传递给调用代码fitxesJoc
,如下所示:
unsigned int demanar_fitxa_tirar(..., tNode** fitxesJoc, ...) // Note extra *
{
// ...
*fitxesJoc = ultimaFitxa; // Note extra *
}
void mainProgram()
{
tNode* fitxesJoc;
// ...
resultado = demanar_fitxa_tirar(..., &fitxesJoc, ...); // Note extra &
// ...
}
答案 1 :(得分:2)
从您的代码中,不清楚您的函数在哪里开始和结束以及它作为参数需要什么,但我猜测您的问题是fitxesJoc
变量,它可能作为参数传递到功能。 C在调用函数时调用参数(call-by-value)。您可以使用指针将地址传递给fitxesJoc
变量,并将其重写为如下所示:
// fitxesJoc would be a `tNode**` rather than `tNode*`.
tNode* ultimaFitxa = (tNode *)malloc(sizeof(tNode));
ultimaFitxa->info.inferior = opcionesCorrectas[opcionFitxa - 1].inferior;
ultimaFitxa->info.superior = opcionesCorrectas[opcionFitxa - 1].superior;
ultimaFitxa->info.pos = opcionesCorrectas[opcionFitxa - 1].pos;
ultimaFitxa->seg = *fitxesJoc;
*fitxesJoc = ultimaFitxa;
答案 2 :(得分:1)
我认为你没有提供足够的代码,但我怀疑问题在于:
fitxesJoc = ultimaFitxa;
(Linked-list现在等于新节点。)
问题是参数是按值传递的。 如果要更改参数的值,则需要通过指针传递, 并使用指针更改值。
*pfitxesJoc = ultimaFitxa;
请提供更多代码,包括函数标题和函数调用,以获得更好的答案。
答案 3 :(得分:0)
看起来你实际上并没有将新的多米诺骨牌添加到链表中。但是,很难分辨,因为你需要发布更多代码,因为你的代码不是英文代码。