Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de pointeur

    28 novembre 2008 à 13:00:21

    Bonjour.

    J'ai un projet à faire à l'université et voilà que je rencontre un problème.

    Voilà mon main :

    int diff;
    	int x,y;
    	char chiffre;
    	
    	diff=Demande_Niv();	
    	AfficherTableau(diff);
    	
    	EcrireTableau(&x,&y,&chiffre);	
    	Ecrire(x,y,chiffre);	
    		
    	AttendreClic();
    	return 0;
    


    Quand je complile ce programme, il me met :
    warning: passing arg 3 of `Ecrire' makes pointer from integer without a cast.

    Je vous met la signature de la fonction Ecrire qui est en fait une fonction d'une librairie faite par l'université :


    /*affiche le text donne a partir di point de coordonnees (x,y).*/
    int Ecrire (int x, int y, char texte[])
    

    C'est la fonction ou est affiché mon warning.

    Sinon mes autres fonctions sont :


    void EcrireTableau(int *x, int *y, char *c)
    {
    	int b;
    	AttendreClicXY(x,y,&b);
    	AttendreTaper(c);
    }
    


    /* Ou attendreClickXY attend un clic et récupère les coordonnes ainsi que le bouton du clique en mettant à jour les valeurs désignés par x,y,b.
    Le prototype de la fonction est */ ; 
    
    void AttendreClicXY(int *x, int *y, int *b)
     
    
    /*
    et AttendreTaper attend une frappe sur le clavier et récupère la lettre frappée.
    void AttendreFrapper(char *c)
    
    */
    
    Merci pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2008 à 13:06:02

      Il y a un probleme avec ta variable chiffre. J'ai l'impression que tu confonds char et chaine.

      A part ça, je trouve tes fonctions un peu bizarres, je serais curieux de voir le code.
      • Partager sur Facebook
      • Partager sur Twitter
        28 novembre 2008 à 14:45:53

        Alors tu pourrais m'expliquer ^^.

        En fait je sais pas trop s'il faut déclarer un tableau de caractère ou s'il faut mettre qu'une variable d type char.

        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2008 à 14:59:27

          Citation : keriatsu


          Quand je complile ce programme, il me met :

          warning: passing arg 3 of  `Ecrire' makes pointer from integer without a cast.




          Il manque encore 2 fonctions,
          -------------- Build: Debug in forums ---------------
          
          Linking console executable: bin\Debug\forums.exe
          obj\Debug\main.o: In function `main':
          C:/dev/forums/main.c:69: undefined reference to `_Demande_Niv'
          C:/dev/forums/main.c:70: undefined reference to `_AfficherTableau'
          collect2: ld returned 1 exit status
          Process terminated with status 1 (0 minutes, 0 seconds)
          2 errors, 0 warnings

          mais ça devrait être quelque chose comme ça
          #include <conio2.h>
          #include <stddef.h>
          
          /*affiche le text donne a partir di point de coordonnees (x,y).*/
          static void Ecrire (int x, int y, char texte[])
          {
              gotoxy(x, y);
              cputs(texte);
          }
          
          
          /* Ou attendreClickXY attend un clic et récupère les coordonnes ainsi que le bouton du clique en mettant à jour les valeurs désignés par x,y,b.
          Le prototype de la fonction est */ ;
          
          static void AttendreClicXY(int *px, int *py, int *pb)
          {
              if (px != NULL)
              {
                  *px = 1;
              }
          
              if (py != NULL)
              {
                  *py = 1;
              }
          
              if (pb != NULL)
              {
                  *pb = 1;
              }
          }
          
          /*
          et AttendreTaper attend une frappe sur le clavier et récupère la lettre frappée.
          
          */
          static void AttendreTaper(char *pc)
          {
              int c = getch();
          
              if (pc!=NULL)
              {
                  *pc=c;
              }
          }
          
          static void AttendreClic(void)
          {
              while (!kbhit())
              {
              }
          }
          
          static void EcrireTableau(int *px, int *py, char *pc)
          {
              int b;
              AttendreClicXY(px,py,&b);
              AttendreTaper(pc);
          }
          
          int main (void)
          {
          
              int diff;
              int x,y;
              char chiffre[16];
          
              diff=Demande_Niv();
              AfficherTableau(diff);
          
              EcrireTableau(&x,&y,chiffre);
              Ecrire(x,y,chiffre);
          
              AttendreClic();
              return 0;
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            28 novembre 2008 à 15:20:39

            #define DIFFI printf("1 : facile, 2 = moyen 3 diablolique");
            
            int Demande_Niv()
            {
            	int diff;
            	
            	DIFFI
            	scanf("%i",&diff);
            	while(diff<=0||diff>3)
            	{
            		printf("attention le logiciel ne comprend pas le niveau demandé. Recommencez !!\n\n");
            		DIFFI
            		scanf("%i",&diff);
            	}
            	return diff+1;
            }
            
            void AfficherTableau(int diff)
            {
            	int i;
            	Initialiser(LONG,HAUT);
            	for (i=0;i<=diff*3;i++)
            	{
            		Ligne(ORI,ORI+i*TC,ORI+9*TC,ORI+i*TC);					
            		Ligne(ORI+i*TC,ORI,ORI+i*TC,ORI+9*TC);
            	}
            	for (i=0;i<=diff;i++)
            	{
            		RectanglePlein(ORI-2,ORI-2+i*3*TC,ORI+2+9*TC,ORI+2+i*3*TC);
            		RectanglePlein(ORI-2+i*3*TC,ORI-2,ORI+2+i*3*TC,ORI+2+9*TC);
            	}
            }
            
            /* Après Ligne e RectanglePlein sont d'autr fonction qui font des ligne et des rectngles pleins dans une fenêtre graphique.
            
            */
            
            • Partager sur Facebook
            • Partager sur Twitter
              28 novembre 2008 à 15:28:41

              Citation : keriatsu

              <...>


              Tu as compris ma correction ?

              Sinon, sans code complet, on ne va pas y arriver
              -------------- Build: Debug in forums ---------------
              
              Compiling: main.c
              C:\dev\forums\main.c:65: warning: function declaration isn't a prototype
              C:\dev\forums\main.c: In function `Demande_Niv':
              C:\dev\forums\main.c:68: warning: implicit declaration of function `printf'
              C:\dev\forums\main.c:69: warning: implicit declaration of function `scanf'
              C:\dev\forums\main.c: In function `AfficherTableau':
              C:\dev\forums\main.c:82: warning: implicit declaration of function `Initialiser'
              C:\dev\forums\main.c:82: error: `LONG' undeclared (first use in this function)
              C:\dev\forums\main.c:82: error: (Each undeclared identifier is reported only once
              C:\dev\forums\main.c:82: error: for each function it appears in.)
              C:\dev\forums\main.c:82: error: `HAUT' undeclared (first use in this function)
              C:\dev\forums\main.c:85: warning: implicit declaration of function `Ligne'
              C:\dev\forums\main.c:85: error: `ORI' undeclared (first use in this function)
              C:\dev\forums\main.c:85: error: `TC' undeclared (first use in this function)
              C:\dev\forums\main.c:90: warning: implicit declaration of function `RectanglePlein'
              Process terminated with status 1 (0 minutes, 1 seconds)
              6 errors, 6 warnings
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                28 novembre 2008 à 15:51:25

                J'essaye ^^. La ou e comprend c'est le tableau de caractère qui devient plus un tableau de caractère. attend je regarde bien la correction.

                voici le code complet :


                #include <stdio.h>
                
                #include "graphsimple.h"
                
                #define DIFFI printf("\n\nfacile : 1\n moyen : 2\ndur : 3\n");
                
                #define LONG 600
                #define HAUT 600
                
                #define TC 50
                
                #define ORI 30
                
                #define TCHI
                #define EPAIS
                
                #define TMAX 16
                
                /****************fonction d'acceuil qui renvoie la difficulté du sudoku*******************/
                
                
                	
                int Demande_Niv()
                {
                	int diff;
                	
                	DIFFI
                	scanf("%i",&diff);
                	while(diff<=0||diff>3)
                	{
                		printf("attention le logiciel ne comprend pas le niveau demandé. Recommencez !!\n\n");
                		DIFFI
                		scanf("%i",&diff);
                	}
                	return diff+1;
                }
                	
                /************************fonction de l'affichage du tableau************************/
                
                void AfficherTableau(int diff)
                {
                	int i;
                	Initialiser(LONG,HAUT);
                	for (i=0;i<=diff*3;i++)
                	{
                		Ligne(ORI,ORI+i*TC,ORI+9*TC,ORI+i*TC);					
                		Ligne(ORI+i*TC,ORI,ORI+i*TC,ORI+9*TC);
                	}
                	for (i=0;i<=diff;i++)
                	{
                		RectanglePlein(ORI-2,ORI-2+i*3*TC,ORI+2+9*TC,ORI+2+i*3*TC);
                		RectanglePlein(ORI-2+i*3*TC,ORI-2,ORI+2+i*3*TC,ORI+2+9*TC);
                	}
                }
                /*********************Remplissage du tableau*******************/
                
                void EcrireTableau(int *x, int *y, char *c)
                {
                	int b;
                	AttendreClicXY(x,y,&b);
                	AttendreTaper(c);
                }
                
                /***********************fonction principale********************/
                int main()
                {	
                	int tab[TMAX][TMAX];
                	int diff;
                	int x,y;
                	char chiffre[1];
                	
                	diff=Demande_Niv();	
                	AfficherTableau(diff);
                	
                	EcrireTableau(&x,&y,chiffre[0]);	
                	Ecrire(x,y,chiffre[0]);	
                		
                	AttendreClic();
                	return 0;
                }
                
                • Partager sur Facebook
                • Partager sur Twitter
                  28 novembre 2008 à 15:55:18

                  Citation : keriatsu

                  J'essaye ^^. La ou e comprend c'est le tableau de caractère qui devient plus un tableau de caractère. attend je regarde bien la correction.

                  C'est le plus important...

                  Citation : Pas de titre

                  voici le code complet :


                  On est pas rendus...
                  -------------- Build: Debug in forums ---------------
                  
                  Compiling: main.c
                  C:\dev\forums\main.c:3:25: graphsimple.h: No such file or directory
                  C:\dev\forums\main.c:24: warning: function declaration isn't a prototype
                  C:\dev\forums\main.c: In function `AfficherTableau':
                  C:\dev\forums\main.c:43: warning: implicit declaration of function `Initialiser'
                  C:\dev\forums\main.c:46: warning: implicit declaration of function `Ligne'
                  C:\dev\forums\main.c:51: warning: implicit declaration of function `RectanglePlein'
                  C:\dev\forums\main.c: In function `EcrireTableau':
                  C:\dev\forums\main.c:60: warning: implicit declaration of function `AttendreClicXY'
                  C:\dev\forums\main.c:61: warning: implicit declaration of function `AttendreTaper'
                  C:\dev\forums\main.c: At top level:
                  C:\dev\forums\main.c:66: warning: function declaration isn't a prototype
                  C:\dev\forums\main.c: In function `main':
                  C:\dev\forums\main.c:75: warning: passing arg 3 of `EcrireTableau' makes pointer from integer without a cast
                  C:\dev\forums\main.c:76: warning: implicit declaration of function `Ecrire'
                  C:\dev\forums\main.c:78: warning: implicit declaration of function `AttendreClic'
                  C:\dev\forums\main.c:67: warning: unused variable `tab'
                  Process terminated with status 1 (0 minutes, 1 seconds)
                  1 errors, 11 warnings

                  Mais si tu as compris la correction, ça n'a plus beaucoup d'importance...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    28 novembre 2008 à 16:07:24

                    J'ai une question précise. Ta corection marche mais je n'ai pas trop compris.

                    Tu déclares un tableau de caractère nommé chiffre dont la taille est 16 :

                    char chiffre[16]
                    


                    Après tu appelles la fonction en utilisant comme argument des pointeurs et notre chiffre (mais cette fois sans préciser ou dans le tableau.
                    EcrireTableau(&x,&y,chiffre);


                    c'est le chiffre que je ne comprend pas.



                    Les fonctions suivantes, ce n'est pas moi qui les aient fait, c'est la bibliotèque graphique de l'université de Grenoble :
                    "Initialiser
                    Ligne
                    RectanglePlein
                    AttendreClicXY
                    AttendreTaper
                    Ecrire"

                    Donc je peux pas te fournir leur code, par contre elles marches.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 novembre 2008 à 16:18:08

                      Citation : keriatsu

                      J'ai une question précise. Ta corection marche mais je n'ai pas trop compris.

                      Tu déclares un tableau de caractère nommé chiffre dont la taille est 16 :

                      char chiffre[16]
                      



                      Après tu appelles la fonction en utilisant comme argument des pointeurs et notre chiffre (mais cette fois sans préciser ou dans le tableau.

                      EcrireTableau(&x,&y,chiffre);



                      c'est le chiffre que je ne comprend pas.


                      Sais-tu ce qu'est une chaine de caractères ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        28 novembre 2008 à 16:23:41

                        C'est un tableau ou dans chaque case il y a un caractère ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 novembre 2008 à 16:30:13

                          Citation : keriatsu

                          C'est un tableau ou dans chaque case il y a un caractère ?


                          Oui et qui est terminé par un 0. Ce tableau est un tableau de char. J'ai supposé (peut être à tord) que la fonction EcrireTableau() attendait en 3ème paramètre l'adresse du premier caractère d'un tableau de char, couramment utilisé pour implémenter une chaine C, ceci dans le but de régler le problème de compilation, d'une manière qui m'a semblé la plus correcte.

                          C'est donc pour ça que j'ai modifié char chaine en char chaine[16]. Il faut maintenant espérer que quelque part, ce tableau va être initialisé avec une chaine correcte par une des fonctions avant l'appel de EcrireTableau() ...

                          Mais il se peut aussi que je me soit trompé et que cette fonction attende tout autre chose. Sans documentation précise, on en est réduit à faire des conjectures...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !

                          problème de 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