Partage
  • Partager sur Facebook
  • Partager sur Twitter

Se deplacer dans un tableau2D avec un pointeur

Sujet résolu
    20 août 2019 à 0:57:01

    Bonjour à tous, j'ai crée une fonction qui permet d'afficher le score d'un joueur en console. J'ai dessiné les chiffres de 0 à 9 dans un tableau2D. La fonction affiche le score du joueur 1 à gauche et celui du joueur 2 à droite.

    Pour afficher les chiffres, j'utilise cette fonction : 

    void display_score(int monChiffre)
    {
        char *p;
        int dizaine = 0;
    
            if(monChiffre > 9)
            {
                while(monChiffre > 9)
                {
                    dizaine ++;
                    monChiffre -= 10;
                }
                Locate(W/2 - 13,3);
            }
            else Locate(W/2 - 9,3);
    
    
    if(dizaine == 0)
    {
        p=TabScore + monChiffre; // WARNING A CETTE ENDROIT
    
         for(int j=0;j<5;j++)
         {
             for(int i=0;i<3;i++)
             {
                    if(*p == 'X')
                    {
                        Color(NOIR,BLANC);
                        printf(" ");
                        Color(BLANC,NOIR);
                    }
                    else
                    {
                        printf(" ");
                    }
                    *p++; // WARNING A CETTE ENDROIT
             }
            Locate(x,y+1);
         }
    
    }
    else
    {
    
        for(int i=0;i<2;i++)
        {
    
    
        if(i == 0)
        {
             p=TabScore + dizaine; // WARNING A CETTE ENDROIT
        }
        else
        {
            p=TabScore + monChiffre; // WARNING A CETTE ENDROIT
            Locate(W/2 - 9,3);
    
        }
    
         for(int j=0;j<5;j++)
         {
             for(int i=0;i<3;i++)
             {
                    if(*p == 'X')
                    {
                        Color(NOIR,BLANC);
                        printf(" ");
                        Color(BLANC,NOIR);
                    }
                    else
                    {
                        printf(" ");
                    }
                    *p++; // WARNING A CETTE ENDROIT
             }
            Locate(x,y+1);
         }
    
        }
    
    }
    
    }

    La fonction marche très bien. Mais le problème c'est que j'ai plusieurs warnings...

    Voici les differentes erreurs que je recois :

    p=TabScore + monChiffre;
    warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]|

    Lorsque je me deplace avec mon pointeur p dans mon tableau, j'obtient ce warning. Je pense que pour quelqu'un d'experimenté l'erreur doit être evidente, mais je ne vois pas comment la corriger.

    J'ai essayer de modifier comme ceci :

    p=TabScore[0] + monChiffre;

    J'ai plus de warning, mais du coup mon programme fonctionne plus donc aucun interet...

    De plus, j'ai également cette erreur : 

    warning: value computed is not used [-Wunused-value]|
    // au niveau de cette ligne :
    *p++;


    alors que je m'en sert de mon pointeur ! Pourquoi il me dit que je m'en sert pas ?

    Merci d'avance pour vos éventuelles réponses :)








    -
    Edité par MrTeed 20 août 2019 à 0:58:47

    • Partager sur Facebook
    • Partager sur Twitter
    MrTeed
      20 août 2019 à 10:17:20

      Bonjour,

      TabScore sort d'où , est déclaré/initialisé comment, est de quel type?

      • Partager sur Facebook
      • Partager sur Twitter
        20 août 2019 à 16:02:48

        bxdfr a écrit:

        Bonjour,

        TabScore sort d'où , est déclaré/initialisé comment, est de quel type?


        Bonjour bxdfr, pour répondre à ta question, voilà comment j'ai declaré mon tableau :

          char TabScore[10][16]= {"XXXX XX XX XXXX"," X XX  X  X XXX","XXX  XXXXX  XXX","XXX  XXXX  XXXX","X  X XXXX  X  X",
                                  "XXXX  XXX  XXXX","XXXX  XXXX XXXX","XXX  X XX  X  X","XXXX XXXXX XXXX","XXXX XXXX  X  X"};

        C'est un tableau de char, je crois qu'on appelle ça comme ça :o

        Ma fonction pour afficher le score est placé dans un fichier.c. J'ai declaré mon tableau, puis juste en dessous j'ai fait un include de mon fichier.c et ensuite ya mon main(), ça donne ça en gros :

         char TabScore[10][16]= {"XXXX XX XX XXXX"," X XX  X  X XXX","XXX  XXXXX  XXX","XXX  XXXX  XXXX","X  X XXXX  X  X",
                                  "XXXX  XXX  XXXX","XXXX  XXXX XXXX","XXX  X XX  X  X","XXXX XXXXX XXXX","XXXX XXXX  X  X"};
        
        #include "fichier.c" // le fichier où ya ma fonction
        
        
        int main()
        { }




        -
        Edité par MrTeed 20 août 2019 à 16:03:48

        • Partager sur Facebook
        • Partager sur Twitter
        MrTeed
          20 août 2019 à 16:50:56

          On ne fait jamais d'include de fichier de code .c

              p=TabScore + dizaine; // WARNING A CETTE ENDROIT

          p et TabScore ne sont pas du même type, c'est normal que tu ai un Warning.

          Ce n'est pas plutôt 

              p = *(TabScore+dizaine);

          Que tu voulais faire, ce qui est équivalent à :

              p = TabScore[dizaine];


          -
          Edité par rouloude 20 août 2019 à 17:06:36

          • Partager sur Facebook
          • Partager sur Twitter
            20 août 2019 à 17:13:16

            rouloude a écrit:

            On ne fait jamais d'include de fichier de code .c


            Ah en effet, j'avais jamais fait attention, je pensais qu'on pouvait le faire. Le truc c'est que quand je le fais pas du coup, mon fichier principal va pas chercher les fonctions de mon fichier.c . Il me met 16 erreurs, comment jsuis sensée faire si j'ai pas le droit d'include mon fichier.c ? Là il fait comme si il existait pas enfaite.

            EDIT :

            rouloude a écrit:

            On ne fait jamais d'include de fichier de code .c

                p=TabScore + dizaine; // WARNING A CETTE ENDROIT

            p et TabScore ne sont pas du même type, c'est normal que tu ai un Warning.

            Ce n'est pas plutôt 

                p = *(TabScore+dizaine);

            Que tu voulais faire, ce qui est équivalent à :

                p = TabScore[dizaine];

            -
            Edité par rouloude il y a 10 minutes

            Merci beaucoup ! Je comprend mieux le problème ;) j'ai testé ça fonctionne très bien (enfin pour l'instant en laissant l'include du fichier.c...) 



            -
            Edité par MrTeed 20 août 2019 à 17:20:57

            • Partager sur Facebook
            • Partager sur Twitter
            MrTeed
              20 août 2019 à 17:58:31

              Enleve l'include du fichier .c ..
              • Partager sur Facebook
              • Partager sur Twitter
                20 août 2019 à 19:51:13

                Zérotisme a écrit:

                Enleve l'include du fichier .c ..


                Ouais je l'ai enlevé. Mais du coup ya certaines fonctions que j'utilisais dans mon main qui fonctionne plus. Enfaite je peux pas exécuter les fonctions de mon autre fichier dans mon main. Jvois pas l’intérêt du coup. Apparement faudrait que je mette "extern" devant mes fonctions pour pouvoir les utiliser dans un autre fichier ? J'ai essayé mais ça a pas fonctionné...

                -
                Edité par MrTeed 20 août 2019 à 20:10:36

                • Partager sur Facebook
                • Partager sur Twitter
                MrTeed
                  20 août 2019 à 20:14:56

                  Il faut enlever l'include du fichier *.c, mais garder l'include du fichier *.h. Tu as bien un fichier *.h en include ?

                  Si tu trouves ça compliqué, je te suggère de tout mettre dans un même fichier dans un premier temps. Tu t'occuperas de comprendre le fonctionnement précis des include en temps voulu. Autant avancer difficulté après difficulté et ne pas toutes les accumuler.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 août 2019 à 0:25:49

                    robun a écrit:

                    Il faut enlever l'include du fichier *.c, mais garder l'include du fichier *.h. Tu as bien un fichier *.h en include ?

                    Si tu trouves ça compliqué, je te suggère de tout mettre dans un même fichier dans un premier temps. Tu t'occuperas de comprendre le fonctionnement précis des include en temps voulu. Autant avancer difficulté après difficulté et ne pas toutes les accumuler.


                    Oui bien sûr, du coup j'ai supprimer le .c, je l'ai remplacé par le .h. Et par la même occasion, j'ai enlever l'include du .h dans l'autre fichier. Justement, je devrais pas avoir d'erreur, normalement. J'ai verifié si il manquait pas certains prototypes dans mon .h mais a priori ce n'est pas le cas... En realité j'ai très peu d'erreur j'en ai juste 4 :

                    obj\Release\main.o:main.c|| undefined reference to `Locate'|
                    obj\Release\main.o:main.c|| undefined reference to `Color'|
                    obj\Release\main.o:main.c|| undefined reference to `Color'|
                    ||error: ld returned 1 exit status|

                    Voilà c'est tout enfaite, voici les deux fonctions qui pose problème, même si je ne pense pas que ça va aider :

                    void Color(int t,int f)
                    {
                        HANDLE theHandle=GetStdHandle(STD_OUTPUT_HANDLE);
                        SetConsoleTextAttribute(theHandle,f*16+t);
                    }
                    
                    void Locate(int x,int y)
                    {
                        HANDLE theHandle=GetStdHandle(STD_OUTPUT_HANDLE);
                        COORD C;
                        C.X=(SHORT)x;
                        C.Y=(SHORT)y;
                        SetConsoleCursorPosition(theHandle,C);
                    }

                    Très grossièrement, voila la partie qui cause problème

                    #include "monfichier.h"
                    
                    int main()
                    {
                      setup();
                    }
                    
                    void setup()
                    {
                    
                     Locate(objet.x,objet.y); //erreur 1
                        Color(NOIR,ROUGE); // erreur 2
                        printf(" ");
                        Color(BLANC,NOIR); //erreur 3
                    
                    }



                    Voilà, mais si par exemple je rajoute une autre fonction de l'autre fichier, et bas ça me rajoute une erreur de plus... 


                    -
                    Edité par MrTeed 21 août 2019 à 0:37:32

                    • Partager sur Facebook
                    • Partager sur Twitter
                    MrTeed

                    Se deplacer dans un tableau2D avec un 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