IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

unused variables qui sont pourtant bien utilisées !


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut unused variables qui sont pourtant bien utilisées !
    Bonjour,



    je ne comprends pas ce qu'il se passe dans mon code, le compile me dit dans un premier temps que deux variables sont inutilisé après les avoir initialisé.
    Mais après, plus loin dans le code à l'endroit ou je les utilise, il me dit que les dites variables ne sont pas connu...et j'avoue qu je ne sais pas du tout à quoi cela peut être dû !



    action.c: In function ‘jouerJcJ’:
    action.c:311:10: warning: unused variable ‘Chevre’ [-Wunused-variable]
    Joueur Chevre=J[1];
    ^
    action.c:310:10: warning: unused variable ‘Tigre’ [-Wunused-variable]
    Joueur Tigre=J[0];
    ^
    action.c:316:10: warning: unused variable ‘Chevre’ [-Wunused-variable]
    Joueur Chevre=J[0];
    ^
    action.c:315:10: warning: unused variable ‘Tigre’ [-Wunused-variable]
    Joueur Tigre=J[1];
    ^
    action.c:335:90: error: ‘Chevre’ undeclared (first use in this function)
    printw("%s: A quel endroit voulez vous placer une chèvre selon une position (x,y) :",Chevre.nom);
    ^
    action.c:335:90: note: each undeclared identifier is reported only once for each function it appears in
    action.c:340:77: error: ‘Tigre’ undeclared (first use in this function)
    printw("%s: Quel tigre voulez vous déplacer selon une position (x,y) :",Tigre.nom);

    La structure Joueur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct joueur{
    	char nom[TAILLE_MAX_NAME];
    	char type[6];
    	char id;
    }Joueur;
    La définition des joueurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Joueur* action_affecteJoueur()
    {
    	Joueur* J=malloc(2*sizeof(Joueur));
    	char nom1[TAILLE_MAX_NAME];
    	char nom2[TAILLE_MAX_NAME];
    	char rep='n';
    	printw("Le joueur 1 choisit son type de pièce\n");
    	printw("Joueur1 entrez votre nom: \n");
    	scanw("%s",nom1);
    	strcpy(J[0].nom,nom1);
    	printw("Joueur2 entrez votre nom: \n");
    	scanw("%s",nom2);
    	strcpy(J[1].nom,nom2);
    	printw("%s Voulez vous jouer les Tigres ? (o/n)\n",J[0].nom);
    	scanw("%c",&rep);
    	if(rep=='o')
    	{
    		strcpy(J[0].nom,"TIGRE");
    		strcpy(J[1].nom,"CHEVRE");
    		J[0].id='T';
    		J[1].id='C';
     
     
    	}
    	else
    	{
    		strcpy(J[0].nom,"CHEVRE");
    		strcpy(J[1].nom,"TIGRE");
    		J[0].id='C';
    		J[1].id='T';
    	}
    	getch();
    	clear();
    	return J;
    }


    La fonction principale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    void jouerJcJ()
    {
    	//initialisation de curses
    	affichage_init_curses();
     
    	//initialisation du plateau
    	Plateau* P=action_initPlateau();
    	action_initTigre(P);
     
    	//initialisation des joueurs
    	Joueur* J=action_affecteJoueur();
    	//si le joueur 0 est Tigre
    	if(action_estJoueurTigre(&J[0])==VRAI)
    	{
    		Joueur Tigre=J[0];
    		Joueur Chevre=J[1];
    	}
    	else
    	{
    		Joueur Tigre=J[1];
    		Joueur Chevre=J[0];
    	}
    	int nb_tour=0;
    	int nb_chevre_place=0;
    	int posHc=-1;
    	int posVc=-1;
    	int posHt=-1;
    	int posVt=-1;
    	int new_posHt=-1;
    	int new_posVt=-1;
    	int new_posHc=-1;
    	int new_posVc=-1;
    	while(nb_chevre_place != NB_CHEVRE)
    	{
    		//tant que la phase de placemant n'est pas terminé
    		affichage_PlateauCurses(P);
    		if((action_estVainqueurChevre(P,nb_tour)==FAUX) && (action_estVainqueurTigre(P,nb_tour)==FAUX))
    		{
    			//S'il n'y a pas un vainqueur la chèvre pose une chèvre
    			printw("%s: A quel endroit voulez vous placer une chèvre selon une position (x,y) :",Chevre.nom);
    			printw("("); posHc=getch();printw(",");posVc=getch();printw(")\n");
    			action_placerChevre(P,posHc,posVc);
    			affichage_PlateauCurses(P);
    			//le tigre déplace un tigre
    			printw("%s: Quel tigre voulez vous déplacer selon une position (x,y) :",Tigre.nom);
    			printw("("); posHt=getch();printw(",");posVt=getch();printw(")");
    			printw("%s: Où voulez vous déplacer selon une position (x,y) :",Tigre.nom);
    			printw("("); new_posHt=getch();printw(",");new_posVt=getch();printw(")\n");
    			action_deplacer(P,posHt,posVt,new_posHt,new_posVt,Tigre);
    			nb_tour++;
     
    		}
    		else
    		{
    			//s'il y a un vainqueur on force la sortie de boucle
    			nb_chevre_place= NB_CHEVRE;
    			if(action_estVainqueurChevre(P,nb_tour)==VRAI)
    			{
    				printw("Félicitation %s vous avez gagné en %d tours\n",Chevre.nom,nb_tour);
    			}
    			else
    			{
    				printw("Félicitation %s vous avez gagné en %d tours\n",Tigre.nom,nb_tour);
    			}
    		}
    	}
    	//la phase de placement est terminé; on entre dans la phase de déplacement s'il n'y a toujours pas de vainqueur.
    	while((action_estVainqueurChevre(P,nb_tour)==FAUX) && (action_estVainqueurTigre(P,nb_tour)==FAUX))
    	{
    			affichage_PlateauCurses(P);
    			//le tigre déplace un tigre
    			printw("%s: Quel tigre voulez vous déplacer selon une position (x,y) :",Tigre.nom);
    			printw("("); posHt=getch();printw(",");posVt=getch();printw(")");
    			printw("%s: Où voulez vous déplacer selon une position (x,y) :",Tigre.nom);
    			printw("("); new_posHt=getch();printw(",");new_posVt=getch();printw(")\n");
    			action_deplacer(P,posHt,posVt,new_posHt,new_posVt,Tigre);
     
    			//la chèvre déplace une chèvre
    			affichage_PlateauCurses(P);
    			printw("%s: Quel tigre voulez vous déplacer selon une position (x,y) :",Tigre.nom);
    			printw("("); posHc=getch();printw(",");posVc=getch();printw(")");
    			printw("%s: Où voulez vous déplacer selon une position (x,y) :",Tigre.nom);
    			printw("("); new_posHc=getch();printw(",");new_posVc=getch();printw(")\n");
    			action_deplacer(P,posHc,posVc,new_posHc,new_posVc,Chevre);
     
    			nb_tour++;
    	}
    	if(action_estVainqueurChevre(P,nb_tour)==VRAI)
    	{
    		printw("Félicitation %s vous avez gagné en %d tours\n",Chevre.nom,nb_tour);
    	}
    	else
    	{
    		printw("Félicitation %s vous avez gagné en %d tours\n",Tigre.nom,nb_tour);
    	}
     
     
    	//fermeture de curses
    	affichage_close_curses();
    }

    Une idée de ce qui me cause ce problème, car j'ai pas l'impression d'avoir merdé sur les pointeurs ?

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Ce à quoi tu ne fais pas assez attention, c'est cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action.c:335:90: error: ‘Chevre’ undeclared (first use in this function)
    Quand tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if(action_estJoueurTigre(&J[0])==VRAI)
    	{
    		Joueur Tigre=J[0];
    		Joueur Chevre=J[1];
    	}
    alors les variables Tigre et Chevre n'existent plus une fois l'accolade fermante passée. C'est une histoire de portée / durée de vie des variables. Ainsi, ces variables ne sont pas utilisées puisque tu ne fais que les déclarer et les initialiser ; plus tard, quand tu penses t'en servir, elles n'existent plus d'où l'erreur que je cite.

    Il faut que tu déclares des variables dans le bloc parent. Regarde ce qu'on appelle la portée d'une variable en C.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut
    Super merci, en déclarant en dehors du bloc c'est passé, je savais que ça marchait comme ça avec les for notamment, mais je n'y avais pas du tout pensé, mea culpa.



    Une autre question.


    Afin de faire une saisie de caractère sans taper sur la touche entrée, je récupère un caractère avec getch(). Mais il s'agit en réalité d'un nombre. DU coup lorsque je veux m'en servir après, ça me converti le caractère par exemple '2' en nombre 50
    Je sais qu'il y a une fonction pour faire ça mais je ne me rappelle plus laquelle.

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    c - '0'

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par imperio Voir le message
    Précisons que atoi() n'est pas une fonction adaptée dans le cas d'applications robustes car on ne peut pas vraiment vérifier si elle a échoué. On préfère alors utiliser http://www.cplusplus.com/reference/cstdlib/strtoul/

    Citation Envoyé par foetus Voir le message
    c - '0'
    C'est une idée, mais je pense qu'il y a un problème plus large ici :
    Citation Envoyé par Amnael
    Afin de faire une saisie de caractère sans taper sur la touche entrée, je récupère un caractère avec getch().
    Et si la personne saisit 'a' ou souhaite saisir '14' ?

    A mon avis, il faut mieux récupérer une ligne complète depuis le clavier avec fgets() puis utiliser sscanf() pour récupérer un nombre à partir de cette chaîne.

    A noter enfin que getch() est non portable et déconseillée par MSDN : http://msdn.microsoft.com/fr-fr/library/ms235446.aspx

Discussions similaires

  1. Variables qui perdent leur valeur lorsqu'utilisées dans fonction
    Par damlarumeur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2009, 09h05
  2. Réponses: 35
    Dernier message: 14/11/2008, 15h30
  3. variable qui m'indique que l'impression s'est bien exécutée
    Par lionelenza dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/06/2008, 17h34
  4. Quels classes utiliser pour remplacer des classes qui sont propriété de Sun
    Par danyboy85 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/11/2007, 16h36
  5. Utiliser les options qui sont dans ma table
    Par valery17 dans le forum Access
    Réponses: 1
    Dernier message: 21/04/2006, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo