2009-06-27 6 views
0

Je crée un jeu de domino et lorsque l'utilisateur ajoute un domino à gauche, le domino est ajouté mais lorsque la fonction se termine, le domino ajouté est GONE.Variable Persistance dans la liste chaînée

Pour votre information:

  • fitxesJoc (liste de liens) contient les dominos de le jeu et est un pointeur passé à la fonction (pour qu'elle dure tout le jeu)
  • opcionesCorrectas (Domino) contient les bons choix de domino

    • inférieure (int) contient le plus petit nombre de domino
    • supérieure (int) contiennent s le plus grand nombre de domino
    • pos (int) la position du domino
  • opcionFitxa (int) contient le choix du joueur

  • ultimaFitxa-> SEG est le noeud 'suivant'
 
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;

en-tête de la fonction

unsigned int demanar_fitxa_tirar(tJugador *jugador, tNode* fitxesJoc, tPartida *partida, tPila* fitxesBarrejades, bool primerCop) 

Appel de la fonction

resultado = demanar_fitxa_tirar(&Jugadors[jugadorActual], fitxesJoc, partida, fitxesBarrejades, true); 

De cette façon, ajouter le domino, en haut des autres dominos.

+0

Je ne vois pas de question ici. Astuce: Les questions se terminent généralement par un point d'interrogation "?". – abelenky

+0

C'est vraiment difficile à comprendre parce que le code n'est pas en anglais. – rlbond

+0

Affichez la fonction qui ajoute une nouvelle entrée LL afin que nous puissions voir le SCOPE! –

Répondre

4

Votre problème est que la dernière ligne de demanar_fitxa_tirar:

fitxesJoc = ultimaFitxa; 

est d'attribuer à une variable locale, qui n'a pas d'effet sur le code d'appel. Vous devez passer un pointeur vers le code de fitxesJoc, comme appeler ceci:

unsigned int demanar_fitxa_tirar(..., tNode** fitxesJoc, ...) // Note extra * 
{ 
    // ... 
    *fitxesJoc = ultimaFitxa;         // Note extra * 
} 

void mainProgram() 
{ 
    tNode* fitxesJoc; 
    // ... 
    resultado = demanar_fitxa_tirar(..., &fitxesJoc, ...);  // Note extra & 
    // ... 
} 
+0

@ Richie, * shakes fist * ... Bien que votre réponse soit supérieure, alors ... +1 –

+0

@Aiden: 37 secondes entières dans cette fois - vous glissez! 8-) – RichieHindle

+0

@Richie: Hors jeu aujourd'hui. Et ma réponse est merde: P * va pour le café * –

2

À partir de votre code, on ne sait pas où votre fonction commence et se termine et ce qu'il faut en tant que paramètres mais je deviner votre problème est avec la variable fitxesJoc qui est probablement transmise en tant qu'argument à la fonction. C copie les arguments lors de l'appel de fonctions (appel par valeur). Vous pouvez transmettre l'adresse à la variable fitxesJoc à l'aide d'un pointeur à la place et le réécrire quelque chose comme ceci:

// 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; 
0

On dirait que vous n'êtes pas en fait l'ajout du nouveau domino à la liste chaînée. Mais, c'est difficile à dire parce que vous devez poster plus de code, et parce que votre code n'est pas en anglais.

1

Je ne pense pas que vous avez fourni assez de code, mais je pense que le problème est:

fitxesJoc = ultimaFitxa; 

(-liste liée est maintenant égal à nouveau nœud).

Le problème est que les paramètres sont transmis par valeur. Si vous souhaitez modifier la valeur du paramètre, vous devez passer par le pointeur et utiliser le pointeur pour modifier la valeur.

*pfitxesJoc = ultimaFitxa; 

Veuillez fournir plus de code, y compris l'en-tête de fonction et l'appel de fonction, pour une meilleure réponse.

Questions connexes