0

我正在制作多米诺骨牌游戏,当用户在左侧添加多米诺骨牌时,多米诺骨牌被添加,但是当函数退出时,添加的多米诺骨牌消失了。

供参考:

  • fitxesJoc(链接列表)包含游戏的多米诺骨牌,是传递给函数的指针(以便它持续整个游戏)
  • opcionesCorrectas (Domino) 包含多米诺骨牌的正确选择

    • 劣质(int)包含较小数量的多米诺骨牌
    • 上级(int)包含更大数量的多米诺骨牌
    • pos (int) 多米诺骨牌的位置
  • opcionFitxa (int) 包含玩家的选择

  • ultimaFitxa->seg 是“下一个”节点
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);

这样我在其他多米诺骨牌的顶部添加多米诺骨牌。

4

4 回答 4

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 &
    // ...
}
于 2009-06-27T21:38:07.670 回答
2

从您的代码中,尚不清楚您的函数的开始和结束位置以及它作为参数的位置,但我您的问题在于fitxesJoc可能作为参数传递给函数的变量。C 在调用函数时复制参数(按值调用)。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;
于 2009-06-27T21:39:29.650 回答
1

我认为您没有提供足够的代码,但我怀疑问题出在:

fitxesJoc = ultimaFitxa;

(链表现在等于新节点)。

问题是参数是按值传递的。如果要更改参数的值,则需要通过指针传递,并使用指针来更改值。

*pfitxesJoc = ultimaFitxa;

请提供更多代码,包括函数头和函数调用,以获得更好的答案。

于 2009-06-27T21:40:40.147 回答
0

看起来您实际上并没有将新的多米诺骨牌添加到链接列表中。但是,这很难说,因为您需要发布更多代码,而且您的代码不是英文的。

于 2009-06-27T21:40:24.127 回答