Постоянство переменной в связанном списке - PullRequest
0 голосов
/ 28 июня 2009

Я делаю игру в домино, и когда пользователь добавляет домино слева, домино добавляется, но когда функция выходит, домино добавляется.

FYI:

  • fitxesJoc (Список ссылок) содержит домино игра и указатель передаются функции (чтобы она длилась всю игру)
  • opcionesCorrectas (Domino) содержит правильный выбор домино

    • младший (int) содержит меньшее число домино
    • superior (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 голосов
/ 28 июня 2009

Ваша проблема в том, что последняя строка 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 &
    // ...
}
2 голосов
/ 28 июня 2009

Из вашего кода не ясно, где ваша функция начинается и заканчивается и что она принимает в качестве параметров, но я думаю ваша проблема связана с переменной 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;
1 голос
/ 28 июня 2009

Я не думаю, что вы предоставили достаточно кода, но я подозреваю, что проблема в:

fitxesJoc = ultimaFitxa;

(Linked-list теперь равен новому узлу).

Проблема в том, что параметры передаются по значению. Если вы хотите изменить значение параметра, вам нужно передать указатель, и используйте указатель, чтобы изменить значение.

*pfitxesJoc = ultimaFitxa;

Пожалуйста, предоставьте больше кода, включая заголовок функции и вызов функции, для лучшего ответа.

0 голосов
/ 28 июня 2009

Похоже, вы на самом деле не добавляете новое домино в связанный список. Но трудно сказать, потому что вам нужно разместить больше кода, и потому что ваш код не на английском языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...