Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2056 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme avec un pointeur

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme avec un pointeur

n°1987406
lassault1
Posté le 25-04-2010 à 17:55:17  profilanswer
 

Salut
 
Voila j'ai fais une fonction qui compare le nombre entré avec le nombre mystère en demandant a la fin si on veut continuer, alors pour ça j'ai déclaré un pointeur qui pointe sur la variable continuer qui se trouve dans le main, mais hélas ça fonctionne pas.. pourquoi?
 
La fonction compare :
 

Code :
  1. void compareNbrG(int nbrMystere)
  2. {
  3.     int nbrE, continuer = 0,*ptr = NULL;
  4.     do
  5.     {
  6.         printf("Quel est le nombre Mystere ? " );
  7.         scanf("%d", &nbrE);
  8.         if (nbrE < nbrMystere)
  9.             printf("C'est plus ++ !\n" );
  10.         else if (nbrE > nbrMystere)
  11.             printf("C'est moins -- !\n" );
  12.         else
  13.         {
  14.             printf("Bravo !! C'est bien le nombre Mystere !!\n\n" );
  15.             printf("Voulez vous continuer ?\n1. YES\n0. NO\n\n  " );
  16.             scanf("%d", &continuer);
  17.             if (continuer == 1)
  18.             {
  19.                 ptr = &continuer;
  20.                 *ptr = 1;
  21.             }
  22.             else if (continuer == 0)
  23.             {
  24.                 ptr = &continuer;
  25.                 *ptr = 0;
  26.             }
  27.         }
  28.     }
  29.     while (nbrE != nbrMystere);
  30. }


mood
Publicité
Posté le 25-04-2010 à 17:55:17  profilanswer
 

n°1987408
Un Program​meur
Posté le 25-04-2010 à 18:01:07  profilanswer
 

1/ Dans le code que tu donnes, ptr pointe vers le continuer de compareNbrG().
2/ Que se passe-t'il si on rentre qqch d'autre que 0 ou 1?


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1987409
billgatesa​nonym
Posté le 25-04-2010 à 18:13:28  profilanswer
 

Citation :

ça fonctionne pas

Qu'est-ce qui ne marche pas ? Il y a un plantage ? un message d'erreur à lacompilation ? autre chose ?

if (continuer == 1)
            {
                ptr = &continuer;
                *ptr = 1;
            }

Que fait ce code ? Remplaçons continuer par Sarkozy et ptr par adresse de Fillon. Comme on le sait, Sarkozy habite à l'Elisée, et on va dire qu'il y a un beau vase là bas. Le programme change l'adresse de Fillon. Il n'est plus à Matignon, mais à l'Elysée. Puis à cette nouvelle adresse, on y met un beau vase. Mais il était déjà là. Alors, c'est comme si on n'avait rien fait.
 
N.B. Il faut choisir de meilleurs noms pour ces variables. Généralement, on combine une description du contenu avec un code pour le type de contenu. Par exemple, au lieu de continuer et ptr, on peut chosir ContinuerFlag, ContinuerPtr.


Message édité par billgatesanonym le 25-04-2010 à 18:15:03
n°1987434
gilou
Modérateur
Modzilla
Posté le 25-04-2010 à 20:41:35  profilanswer
 

Citation :

    int nbrE, continuer = 0,*ptr = NULL;


Tu déclares une variable locale (a la procédure) nommée continuer. Cette variable va donc masquer la variable continuer déclarée dans main.

 

Ce que tu aurais du faire:

 

Soit:
Déclaration
void compareNbrG(int nbrMystere, int *cont)
{
   int nbrE, *ptr = NULL;
   *cont = 0;
......................
Appel:
void compareNbrG(xxx, &continuer);

 

Ou bien (ce me semblerait bien plus logique):
Déclaration
int compareNbrG(int nbrMystere)
{
  int nbrE, continuer = 0,*ptr = NULL;
.................
return continuer;
}
..........................
Appel:
continuer = compareNbrG(xxx);

 

A+,

 



Message édité par gilou le 25-04-2010 à 20:42:08

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1987549
lassault1
Posté le 26-04-2010 à 11:03:50  profilanswer
 

Merci, mais je crois que vous avez pas compris ce que je voulais dire, car a la fin de la fonction compare je veux retourné dans le main avec la valeur de "continuer changer" pour pouvoir faire la boucle jusqu'au menu..
 
Voici mon main :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {
  6.     int choixNiveau,nbrM,nbrM1,nbrJoueurs,continuer = 0,compteur = 1,MIN = 0,MAX = 0;
  7.     printf("\t\t\t\tBIENVENU AU PLUS OU MOINS\n\n" );
  8.     printf("\t*MENU*\n\n" );
  9.     printf("1. Niveau entre 1 et 10\n" );
  10.     printf("2. Niveau entre 1 et 20\n" );
  11.     printf("3. Niveau entre 1 et 50\n" );
  12.     printf("4. Niveau entre 1 et 100\n\n" );
  13.     printf("\t*JOUEUR*\n\n" );
  14.     printf("1. Jouer seul\n" );
  15.     printf("2. Jouer a 2\n\n" );
  16.     do
  17.     {
  18.         srand(time(NULL));
  19.         do
  20.         {
  21.             printf("Quel niveau choisissez vous ? " );
  22.             scanf("%d", &choixNiveau);
  23.             if (choixNiveau < 1 || choixNiveau > 4)
  24.                 printf("Choix incorrect !!!" );
  25.         }
  26.         while (choixNiveau < 1 || choixNiveau > 4);
  27.         do
  28.         {
  29.             printf("\nQuel est le nombre de joueurs ? " );
  30.             scanf("%d", &nbrJoueurs);
  31.             if (nbrJoueurs < 1 || nbrJoueurs > 2)
  32.                 printf("Choix incorrect !!!" );
  33.         }
  34.         while (nbrJoueurs < 1 || nbrJoueurs > 2);
  35.         switch (choixNiveau)
  36.         {
  37.         case 1:
  38.             printf("\nVous avez choisi le Niveau 1 : entre 1 et 10 !\n\n" );
  39.             MIN = 1;
  40.             MAX = 10;
  41.             break;
  42.         case 2:
  43.             printf("\nVous avez choisi le Niveau 2 : entre 1 et 20 !\n\n" );
  44.             MIN = 1;
  45.             MAX = 20;
  46.             break;
  47.         case 3:
  48.             printf("\nVous avez choisi le Niveau 3 : entre 1 et 50 !\n\n" );
  49.             MIN = 1;
  50.             MAX = 50;
  51.             break;
  52.         case 4:
  53.             printf("\nVous avez choisi le Niveau 4 : entre 1 et 100 !\n\n" );
  54.             MIN = 1;
  55.             MAX = 100;
  56.             break;
  57.         default:
  58.             printf("\nChoix incorrect !!!\n\n" );
  59.             break;
  60.         }
  61.         if (choixNiveau == 1)
  62.         {
  63.             nbrM = (rand() % (MAX - MIN + 1)) + MIN;
  64.             compteur = 1;
  65.             compareNbrG(nbrM);
  66.         }
  67.         printf("Continuer vaut : %d" , continuer);
  68.         if (choixNiveau ==2)
  69.         {
  70.             printf("Quel est le nombre Mystere a trouve ? " );
  71.             scanf("%d", &nbrM1);
  72.             compteur = 1;
  73.             system("cls" );
  74.             compareNbrT(nbrM1);
  75.         }
  76.     }
  77.     while (continuer);
  78.     return 0;
  79. }


 
voici mes fonctions :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "fonction.h"
  5. void compareNbrG(int nbrMystere)
  6. {
  7.     int nbrE, continuer = 0,*ptr = NULL;
  8.     do
  9.     {
  10.         printf("Quel est le nombre Mystere ? " );
  11.         scanf("%d", &nbrE);
  12.         if (nbrE < nbrMystere)
  13.             printf("C'est plus ++ !\n" );
  14.         else if (nbrE > nbrMystere)
  15.             printf("C'est moins -- !\n" );
  16.         else
  17.         {
  18.             printf("Bravo !! C'est bien le nombre Mystere !!\n\n" );
  19.             printf("Voulez vous continuer ?\n1. YES\n0. NO\n\n  " );
  20.             scanf("%d", &continuer);
  21.             if (continuer == 1)
  22.             {
  23.                 ptr = &continuer;
  24.                 *ptr = 1;
  25.             }
  26.             else if (continuer == 0)
  27.             {
  28.                 ptr = &continuer;
  29.                 *ptr = 0;
  30.             }
  31.         }
  32.     }
  33.     while (nbrE != nbrMystere);
  34. }
  35. void compareNbrT(int nbrMystere1)
  36. {
  37.     int nbrE,continuer = 0,*ptr = NULL;
  38.     do
  39.     {
  40.         printf("Quel est le nombre Mystere ? " );
  41.         scanf("%d", &nbrE);
  42.         if (nbrE < nbrMystere1)
  43.             printf("C'est plus ++ !\n" );
  44.         else if (nbrE > nbrMystere1)
  45.             printf("C'est moins -- !\n" );
  46.         else
  47.         {
  48.             printf("Bravo !! C'est bien le nombre Mystere !!\n\n" );
  49.             printf("Voulez vous continuer ?\n1. YES\n2. NO\n\n  " );
  50.             scanf("%d", &continuer);
  51.             if (continuer == 1)
  52.             {
  53.                 ptr = &continuer;
  54.                 *ptr = 1;
  55.             }
  56.             else if (continuer == 0)
  57.             {
  58.                 ptr = &continuer;
  59.                 *ptr = 0;
  60.             }
  61.         }
  62.     }
  63.     while (nbrE != nbrMystere1);
  64. }

n°1987619
gilou
Modérateur
Modzilla
Posté le 26-04-2010 à 13:03:33  profilanswer
 

Citation :

Merci, mais je crois que vous avez pas compris ce que je voulais dire, car a la fin de la fonction compare je veux retourné dans le main avec la valeur de "continuer changer" pour pouvoir faire la boucle jusqu'au menu..

Si, j'ai parfaitement compris ce que tu dis, la c'est toi qui n'a pas compris les explications.
La variable continuer de main ne sera pas modifiée par les appels a compareNbrG et compareNbrT parce que dans compareNbrG  la variable continuer de main est masquée par la variable continuer de compareNbrG et que dans compareNbrT  la variable continuer de main est masquée par la variable continuer de compareNbrT.
 
C'est pas comme tu as voulu faire qu'on fait (tu as essayé d'utiliser continuer comme variable globale, c'est pas une mauvaise idée [si tout était dans un seul fichier, et que tu supprimais   les définitions de continuer dans compareNbrG et compareNbrT, ça pourrait marcher], sauf que ça cause beaucoup trop de problèmes a la longue, les variables globales, et c'est une habitude qu'il ne faut pas prendre). Je t'ai indiqué dans mon post précédent comment remédier a ton pb.
 
A+,

Message cité 1 fois
Message édité par gilou le 26-04-2010 à 13:04:43

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1987670
404 Not Fo​und
Posté le 26-04-2010 à 15:24:44  profilanswer
 

gilou a écrit :

Je t'ai indiqué dans mon post précédent comment remédier a ton pb.


Faudrait déjà qu'il les lise (et pas en diagonale) [:ocube]

n°1987677
lassault1
Posté le 26-04-2010 à 15:39:49  profilanswer
 

Merci gilou c'est compris...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme avec un pointeur

 

Sujets relatifs
[C] probleme sprintf et pointeur :S[Résolu]Probleme avec des pointeur de structure
Problème de pointeurProblème de pointeur objet mère qui pointe sur objet fille
Probleme de malloc sur un tableau de pointeur.Probleme utilisation pointeur et reference
Opérations matrices problème structure pointeurproblème avec une fonction qui renvoie un pointeur de char
probleme de pointeurProbleme de pointeur
Plus de sujets relatifs à : Probleme avec un pointeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR