Partage
  • Partager sur Facebook
  • Partager sur Twitter

calcule entre pointeur

sa marche pas O_o

Sujet résolu
    8 juin 2006 à 14:38:16

    bonjour

    voila jai taper c'est quelque code de ligne dans mon programme

    *Pnombredebar = *Pnombredebar - *Pcouprentrez;
    *Pcouprestant --;

    et sa ne marche pas quand je demande dafficher la valeur de *Pnombredebar et *Pcouprestant il maffiche nimporte koi
    svp aidez moi XD :p
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 14:52:22

      si tu lui demande d'afficher l'adresse en mémoire d'une variable, il t'affichera forcement n'importe quoi a tes yeux. par contre je sais pas si ça marche des operations entre pointeur à cause du signe '*' qui sert à multiplier en théorie :
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 14:53:22

        a oui peut etre que c'est a cause de sa je n'y avait pas penser ^^

        mais dans ce cas la coment faire o_O

        ps je redit ce post :
        jai trouver la solution pour le 2 eme calcule
        il sufisais que je face ceci
        Pnombredebar = *Pnombredebar - *Pcouprentrez;

        mais maintenant c'est avec le 1 er que je bug et la je comprend pas
        jai fait ceci mais sa marche toujours pas

        Pcouprestant --;
        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2006 à 15:08:42

          Pcouprestant  = *Pcouprestant - 1;
          ?????
          • Partager sur Facebook
          • Partager sur Twitter
            8 juin 2006 à 15:10:39

            nan jai essayer sa ne marche pas

            au debut il me dit que cest 13 ensuite 1 encore 1 et apres 210002 y a un probleme la je croi XD
            • Partager sur Facebook
            • Partager sur Twitter
              8 juin 2006 à 15:12:31

              Voici la solution :
              Pnombredebar=(*Pnombredebar)-(*Pcouprentrez);
                     
              printf("Resultat de *Pnombredebar=*Pnombredebar - *Pcouprentrez = %d\n",*Pnombredebar);
                     
              /*essaie*/
              (*PcoupRestant)--;
              printf("Resultat de (*PcoupRestant)--: %d\n",*PcoupRestant);

              Les paranthèses servent à exécuter une indirection, cela veut dire que tu prend la valeur pointée et non pas l'adresse comme tu le faisais avant (ce qui explique pourquoi tu obtenais n'importe quoi :p )
              Bonne prog... :D
              • Partager sur Facebook
              • Partager sur Twitter
                8 juin 2006 à 15:14:04

                sa me fait la meme chose pour
                (*pcouprestant)-- ;

                • Partager sur Facebook
                • Partager sur Twitter
                  8 juin 2006 à 15:15:26

                  essay de rajouter une variable, avec au début la valeur de Pcouprestant, puis tu modifie comme tu veux et à la fin tu reprend la valeur dans Pcouprestant
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 juin 2006 à 15:17:17

                    jai essayer de faire sa

                    long coupacalculer = *Pcouprestant;
                    Pcouprestant = coupacalculer --;

                    mais le resultat est le meme

                    voila mon code C :


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


                    void TourDeJeu(long *Pcouprestant, long *Pnombredebar, long *Pcouprentrez, long NOMBRE_MAX, long NOMBRE_MIN);



                    int main ( int argc, char** argv )
                    {
                        long couprestant = 9, nombredebarre = 15, NOMBRE_MAX = 3, NOMBRE_MIN = 1, couprentrez = 0;
                        long *Pcouprestant = &couprestant, *Pnombredebar = &nombredebarre, *Pcouprentrez = &couprentrez;

                            printf("Bonjour bienvenue dans mon jeu de l'allumete \n\n");
                            printf("pour tout ce qui on deja vue le jeu televiser fort boyar sachez que ce jeu est dans la serie \n\n");

                            TourDeJeu(Pcouprestant, Pnombredebar, Pcouprentrez, NOMBRE_MAX, NOMBRE_MIN);
                            return 0;
                    }

                    void TourDeJeu(long *Pcouprestant, long *Pnombredebar, long *Pcouprentrez, long NOMBRE_MAX, long NOMBRE_MIN)
                    {
                        while(*Pcouprestant != 0 || *Pnombredebar != 0)
                        {

                            printf("choisissez un chiffre entre 1 et 3 \n\n ");
                            printf("il vous reste %ld tout a jouer et il reste %ld allumette ", *Pcouprestant, *Pnombredebar);
                            scanf("%ld", Pcouprentrez);

                            if(*Pcouprentrez < NOMBRE_MIN || *Pcouprentrez > NOMBRE_MAX)
                            {
                                printf(" \n Desole mais le chiffre que tu a taper nest pas bon recommence ");
                            }

                        Pcouprestant = *Pcouprestant-- ;
                        Pnombredebar = *Pnombredebar - *Pcouprentrez;
                        }
                        if(*Pcouprestant == 0 && *Pnombredebar == 0)
                        {
                            printf("Bravo ! tu as gagner \n");
                        }
                        else
                        {
                            printf("desolé mais tu as perdut ..");
                        }
                    }


                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 juin 2006 à 15:19:48

                      Citation : minaithnir

                      par contre je sais pas si ça marche des operations entre pointeur à cause du signe '*' qui sert à multiplier en théorie :


                      Bien sûr que si on peut !

                      gameonli << Comment affiches-tu la valeur sur laquelle pointe le pointeur ?

                      Au lieu de faire ceci :
                      *Pnombredebar = *Pnombredebar - *Pcouprentrez;

                      Tu peux faire cela pour raccourcir :
                      *Pnombredebar -= *Pcouprentrez;


                      Pcouprestant = *Pcouprestant-- ;
                      Pnombredebar = *Pnombredebar - *Pcouprentrez;

                      Pourquoi manque-t-il des opérateurs de pointeur ici ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 juin 2006 à 15:29:11

                        franchement je ne comprend pas il me dit a la ligne

                        Pcouprestant = *Pcouprestant-- ;
                        invalid conversion from 'long int' to 'long int*'

                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 juin 2006 à 15:30:55

                          Lire les commentaires...J'espère que ca t'aidera...

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


                          void TourDeJeu(long *Pcouprestant, long *Pnombredebar, long *Pcouprentrez, long NOMBRE_MAX, long NOMBRE_MIN);



                          int main ( int argc, char** argv )
                          {
                              long couprestant = 9, nombredebarre = 15, NOMBRE_MAX = 3, NOMBRE_MIN = 1, couprentrez = 0;
                              long *Pcouprestant = &couprestant, *Pnombredebar = &nombredebarre, *Pcouprentrez = &couprentrez;

                                  printf("Bonjour bienvenue dans mon jeu de l'allumete \n\n");
                                  printf("pour tout ce qui on deja vue le jeu televiser fort boyar sachez que ce jeu est dans la serie \n\n");

                                  TourDeJeu(Pcouprestant, Pnombredebar, Pcouprentrez, NOMBRE_MAX, NOMBRE_MIN);
                                  return 0;
                          }

                          void TourDeJeu(long *Pcouprestant, long *Pnombredebar, long *Pcouprentrez, long NOMBRE_MAX, long NOMBRE_MIN)
                          {
                              while(*Pcouprestant != 0 || *Pnombredebar != 0)
                              {

                                  printf("choisissez un chiffre entre 1 et 3 \n\n ");
                                  printf("il vous reste %ld tout a jouer et il reste %ld allumette ", *Pcouprestant, *Pnombredebar);
                                  scanf("%ld", Pcouprentrez);

                                  if(*Pcouprentrez < NOMBRE_MIN || *Pcouprentrez > NOMBRE_MAX)
                                  {
                                      printf(" \n Desole mais le chiffre que tu a taper nest pas bon recommence ");
                                  }
                          /*Ici ca ne veut rien dire...*/
                          /* faire*/
                              (*Pcouprestant)--;
                            /*  Pcouprestant = *Pcouprestant-- ;*/
                              /*ici, meme problème*/
                          /*faire*/
                             *Pnombredebar = (*Pnombredebar) - (*Pcouprentrez);
                              /*Pnombredebar = *Pnombredebar - *Pcouprentrez*/;
                              }
                              if(*Pcouprestant == 0 && *Pnombredebar == 0)
                              {
                                  printf("Bravo ! tu as gagner \n");
                              }
                              else
                              {
                                  printf("desolé mais tu as perdut ..");
                              }
                          }
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 juin 2006 à 15:31:39

                            le code de murbain ne marche pas?

                            [EDIT]:je suis toujours en retard :p [/EDIT]
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 juin 2006 à 15:33:38

                              il marche merci beaucoup !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 juin 2006 à 15:35:18

                                Citation : gameonli


                                void TourDeJeu(long *Pcouprestant, long *Pnombredebar, long *Pcouprentrez, long NOMBRE_MAX, long NOMBRE_MIN);

                                Problème de conception. Il est certainement plus pratique de regrouper les données dans une structure :

                                struct data
                                {
                                   long couprestant;
                                   long nombredebar;
                                   long couprentrez;
                                };

                                et de passer l'adresse de la structure :


                                void TourDeJeu(struct data *p_data, long NOMBRE_MAX, long NOMBRE_MIN);

                                Ensuite, on accède aux données comme ceci :

                                   p_data->couprestant;
                                   p_data->nombredebar;
                                   p_data->couprentrez;

                                et on utilise les opérateurs 'normalement' (pas de parenthèses ou autres syntaxes gores...)

                                   p_data->nombredebar -= p_data->couprentrez;
                                   p_data->couprestant++;

                                Rien de tout celà n'a à voir avec ton titre "calcule entre pointeur"...*
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Music only !
                                  8 juin 2006 à 15:44:23

                                  cest un jeu ou tu as le droi a 9 coup et il y a 15 baton en jeu tu doit retirer par coup un chiffre entre 1 et 3

                                  a la fin de tes neuf coup tu doit avoir exactement 0 nombre de barre

                                  si tu as -1 ou +1 et meme plus ou moin tu as perdut
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    8 juin 2006 à 16:09:39

                                    Au passage j'en profite pour ramener ma science pour dire que l'opérateur postfixé -- ne fonctoinne pas comme en php : si tu indique :

                                    var1 = var2--;

                                    Alors var1 aura la valeur qu'avait var2 AVANT la décrémentation. Pour lui faire prendre la valeur qu'elle a APRES la décrémentation, il faut utiliser l'opérateur postfixé, ou bien le faire en deux fois...

                                    var1 = --var2;


                                    var2--;
                                    var1 = var2;


                                    A toi de voir laquelle tu préfère, mais c'est "normal" que tu n'obtienne pas réellement le résultat que tu voulais...

                                    Bon courage pour la suite !
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    calcule entre pointeur

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown