Problème pointeurs

Fermé
YoungDev - 26 oct. 2016 à 12:43
[Dal] Messages postés 6192 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 28 juin 2024 - 26 oct. 2016 à 16:14
Bonjour, je viens de commencer un programme et j'ai déja une erreur lorsque j'initialise mes variables dans une fonction. Je pense que l'erreur doit venir des pointeurs (oui, je suis encore novice). De plus, lors de la compilation, j'obtient une erreur expected expression before 'long'.
Pourriez vous me dire d'ou vient cette erreur, et comment corriger le problème de pointeurs ?
Merci d'avance.

Ps: je prévoit un long programme, c'est pour cela que je crée une fonction pour la saisie des valeurs



#include <stdlib.h>
#include <stdio.h>

void setgamestate();

int main ()
	{
		system("cls");

		long hpmoi = 0;
		long hpadv = 0;
		long cartesdeck = 0;
		long fatiguemoi = 0;
		long fatigueadv = 0;

		long *xhpmoi = &hpmoi;
		long *xhpadv = &hpadv;
		long *xcartesdeck = &cartesdeck;
		long *xfatiguemoi = &fatiguemoi;
		long *xfatigueadv = &fatigueadv;

		setgamestate(long &hpmoi, long &hpadv, long &cartesdeck, long &fatiguemoi, long &fatigueadv);

		printf ("%ld %ld %ld %ld %ld", hpmoi, hpadv, cartesdeck, fatiguemoi, fatigueadv); /*verifier valeurs variables*/

		return EXIT_SUCCESS;
	}

void setgamestate(long hpmoi, long hpadv, long cartesdeck, long fatiguemoi, long fatigueadv)
	{
		long *xhpmoi = &hpmoi;
		long *xhpadv = &hpadv;
		long *xcartesdeck = &cartesdeck;
		long *xfatiguemoi = &fatiguemoi;
		long *xfatigueadv = &fatigueadv;

		printf ("Mes hp :\n");
		scanf ("%ld", xhpmoi);

		printf ("Hp adverses :\n");
		scanf ("%ld", xhpadv);

		printf ("Nombre de cartes de mon deck\n");
		scanf ("%ld", xcartesdeck);

		printf ("Mes dégats de fatigue :\n");
		scanf ("%ld", xfatiguemoi);

		printf ("Les dégats de fatigue de l'adversaire :\n");
		scanf ("%ld", xfatigueadv);

		printf ("\n\n");

		printf ("%ld, %ld, %ld, %ld, %ld", *xhpmoi, *xhpadv, *xcartesdeck, *xfatiguemoi, *xfatigueadv); /*verifier valeurs variables*/

		printf ("\n\n");
	}

1 réponse

[Dal] Messages postés 6192 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 28 juin 2024 1 088
Modifié par [Dal] le 26/10/2016 à 16:17
Salut YoungDev,

Ton erreur de compilation est due au fait que lorsque tu appelles la fonction, tu inclues dans les paramètres d'appel le type des paramètres. Il faut juste passer les paramètres.

Comme cela :

setgamestate(&hpmoi, &hpadv, &cartesdeck, &fatiguemoi, &fatigueadv);

Ensuite, dans ton main, tu t'encombres inutilement de variables long *xhpmoi, etc., que tu n'utilises pas.

Enfin, dans ta fonction, puisque tu passes déjà des pointeurs sur un long, tu as déjà ce qu'il te faut avec les paramètres passés, et là aussi tes variables additionnelles sont inutiles.

Au final, cela donne ceci, ce qui est beaucoup plus simple :

#include <stdlib.h>
#include <stdio.h>

void setgamestate();

int main(void) {
    long hpmoi = 0;
    long hpadv = 0;
    long cartesdeck = 0;
    long fatiguemoi = 0;
    long fatigueadv = 0;

    setgamestate(&hpmoi, &hpadv, &cartesdeck, &fatiguemoi, &fatigueadv);

    printf("%ld, %ld, %ld, %ld, %ld\n", hpmoi, hpadv, cartesdeck,
            fatiguemoi, fatigueadv); /*verifier valeurs variables*/

    return EXIT_SUCCESS;
}

void setgamestate(long * phpmoi, long * phpadv, long * pcartesdeck,
        long * pfatiguemoi, long * pfatigueadv) {
    printf("Mes hp :\n");
    scanf("%ld", phpmoi);

    printf("Hp adverses :\n");
    scanf("%ld", phpadv);

    printf("Nombre de cartes de mon deck\n");
    scanf("%ld", pcartesdeck);

    printf("Mes dégats de fatigue :\n");
    scanf("%ld", pfatiguemoi);

    printf("Les dégats de fatigue de l'adversaire :\n");
    scanf("%ld", pfatigueadv);

    printf("\n\n");

    printf("%ld, %ld, %ld, %ld, %ld\n", *phpmoi, *phpadv, *pcartesdeck, 
            *pfatiguemoi, *pfatigueadv); /*verifier valeurs variables*/         

    printf("\n\n");
}


Dal
0