probleme de pointeur

probleme de pointeur - C - Programmation

Marsh Posté le 17-01-2006 à 08:51:03    

salut a tous, alors voila je suis en train de faire un petit programme en C (je débute)
le but de ce programme et dappliquer un pasque de sous réseau a une adresse
voila mon source :
 
#include <stdio.h>
char octet[8],mask[8],application;
int i;
 
main()
{  
 printf("saisir le masque : \n" );
 scanf(" %s", &mask);
 printf("saisir l'octet : \n " );
 scanf(" %s", &octet);
 application="";
 
  for (i=1;i<=8;i++);
  {  
   if (octet[i]=mask[i])  
    { application = application && "1" ;}
   else
    { application = application && "0" ;}
  }
 return 0;
}
 
 
 
 
et quand je compile, ca me fait cette erreur : " affectation transforme un pointeur en entier sans transtypage"
je comprend pas pourquoi, et les pointeurs je connais pas trop
 
dc si quelqu'un aurai la gentillesse de mexpliquer svp...
merci

Reply

Marsh Posté le 17-01-2006 à 08:51:03   

Reply

Marsh Posté le 17-01-2006 à 09:08:16    

Si j'ai bonne mémoire, les tableau sont DéJà des pointeurs...
 
enlève les "&" dans les scanf!
 
ps: utilise les balise cpp... c'ets beaucoup plus joli et plus simple.
Je n'ai pas de compilateur ici, mais essaie ce code-ci:
 

Code :
  1. #include <stdio.h>
  2. char octet[8],mask[8],application;
  3. int i;
  4. int main(void)
  5. printf("saisir le masque : \n" );
  6. scanf(" %s", mask);
  7. printf("saisir l'octet : \n " );
  8. scanf(" %s", octet);
  9. application="";
  10.   for (i=1;i<=8;i++);
  11.   { 
  12.    if (octet[i]=mask[i]) 
  13.     { application = application && "1" ;}
  14.    else
  15.     { application = application && "0" ;}
  16.   }
  17. return 0;
  18. }

Message cité 1 fois
Message édité par ElDje le 17-01-2006 à 09:11:16
Reply

Marsh Posté le 17-01-2006 à 09:10:24    


 
cest ca :  
 
#include <stdio.h>
char octet[8],mask[8],application;
int i;
 
main()
{  
 while (mask != "0" || mask !="1" )
 { printf("saisir le masque : \n" );
  scanf(" &c", mask);
  printf("saisir l'octet : \n " );
  scanf(" &c", octet);
  application="";
 
   for (i=1;i<=8;i++);
   {  
    if (octet[i]== mask[i])  
     { application = application && '1' ;}
    else
     { application = application && '0' ;}
 }  }
 return 0;
}
 
 
ca marche pas,  

Reply

Marsh Posté le 17-01-2006 à 09:13:23    

avant de vous faire insulter http://mapage.noos.fr/emdel/inputs.htm

Reply

Marsh Posté le 17-01-2006 à 09:27:22    

jarrive pas ! ! ! tan pis , merci quand meme... je chercherai une autre fois

Reply

Marsh Posté le 17-01-2006 à 09:51:01    

ElDje a écrit :

Si j'ai bonne mémoire, les tableau sont DéJà des pointeurs...


 
C'est quoi alors un tableau de pointeurs ? :heink:


---------------
un perlien qui programme salement
Reply

Marsh Posté le 17-01-2006 à 09:54:40    

je crois que l'erreur est facile à corriger !!!
les indices des tableaux commencent à 0
donc :
char tab[8];
crée un tableau dont les indices vont de 0 à 7, et non de 1 à 8


---------------
un perlien qui programme salement
Reply

Marsh Posté le 17-01-2006 à 10:03:47    

shreck a écrit :

cest ca :  
 

Code :
  1. #include <stdio.h>
  2. char octet[8],mask[8],application;
  3. int i;
  4. main()
  5. {
  6. while (mask != "0" || mask !="1" )
  7. { printf("saisir le masque : \n" );
  8.  scanf(" &c", mask);
  9.  printf("saisir l'octet : \n " );
  10.  scanf(" &c", octet);
  11.  application="";
  12.   for (i=1;i<=8;i++);
  13.   {
  14.    if (octet[i]== mask[i])
  15.     { application = application && '1' ;}
  16.    else
  17.     { application = application && '0' ;}
  18. }  }
  19. return 0;
  20. }


 
 
ca marche pas,


 
pas étonnant ... le formatage pour scanf est invalide ...
tu prévois 8 caractères pour ton masque et ton adresse, qu'est-ce que tu comptes avoir dedans ?
mask != "1" -> ce n'est pas comme ca qu'on compare des chaines en C (on utilise plutôt strcmp par exemple)
ensuite, tu confonds les valeurs numériques avec les caractères (application && '1')
 
au vu de tout ca, je te conseille vivement de te plonger dans un bon livre pour apprendre le C ...

Reply

Marsh Posté le 17-01-2006 à 10:06:14    

shreck a écrit :

salut a tous, alors voila je suis en train de faire un petit programme en C (je débute)
le but de ce programme et d'appliquer un masque de sous réseau a une adresse
voila mon source :


Enormément de fautes. Mes commentaires (-ed-). Pose des questions si tu ne comprends pas.


#include <stdio.h>
 
/* -ed- ajoute pour strcpy() et strcat() */
#include <string.h>
 
/* -ed-
char octet[8],mask[8],application;
int i;
pourquoi des globales ?  */
 
/* -ed-
main()
 
en C99, le type retourne' doit etre explicite */
int main(void)
{
   /* -ed- variables deplacees */
 
   /* -ed-
   char octet[8], mask[8];
 
   Rappel : En C, les chaines de caracteres sont terminees par un 0.
   */
   char octet[8 + 1], mask[8 + 1];
   int i;
 
   /* -ed-
   printf("saisir le masque : \n" );
 
   le ' ' entre le ':' et le '\n' ne sert a rien... */
   printf("saisir le masque :\n" );
 
   /* -ed-
   scanf(" %s", &mask);
 
   Pourquoi & ? "%s" attend l'adresse d'un char.
   mask est l'adresse du premier char du tableau mask.
 
   Utilisation dangereuse de scanf() :
 
   - Pas de controle de la taille saisie
   - Pas de purge
   - Pas de verification de la valeur retournee
 
   Cette fonction est difficile a utiliser correctement.
   Preferer fgets() qui est plus facile a maitriser et a
   utiliser d'une facon sure.
 
   http://mapage.noos.fr/emdel/notes.htm#saisie
   http://mapage.noos.fr/emdel/notes.htm#fichiers
   */
 
   scanf(" %8s", mask);
 
   printf("saisir l'octet :\n" );
   scanf(" %8s", octet);
 
   /* -ed-
   application="";
 
   ERREUR : application est un char et "" est une chaine.
   Les types sont incompatibles.
 
   Si tu veux une chaine de caractere il faut definir une variable de type
   tableau de char suffisamment grand pour y stocker le resultat.
 
   D'autre part, une affectation de chaine se fait avec strcpy() ou une
   fonction derivee.
 
   */
   {
      /* -ed- definition d'un tableau de char pour stocker le resultat... */
      char application[16];
      strcpy (application, "" );
 
      /* -ed-
        for (i=1;i<=8;i++);
 
        Rappel : En C, les indices d'un tableau de taille n vont de 0 a n-1
      */
      for (i = 0; i < 8; i++)
         /* -ed-
                  ;
         ce ';' n'a rien a faire la. Il signifie que la boucle n'a rien a faire,
         ce qui n'est probablement pas ce que tu veux... */
      {
         /* -ed-
            if (octet[i]=mask[i])
 
         Rappel : '=' est l'operateur d'affectation en C.
                 '==' est l'operateur d'egalite...
         */
         if (octet[i] == mask[i])
         {
            /* -ed-
                   application = application && "1" ;
 
            je ne sais pas d'ou tu sort ca, mais je suppose que tu veux
            'concaterer' "0" ou "1". La fonction dediee est
            strcat()... */
            strcat (application, "1" ) ;
         }
         else
         {
            strcat (application, "0" ) ;
         }
      }
      /* -ed- je suppose qu'on veut voir le resultat de nos manipulations
      genetiques... */
      printf("'%s'\n", application);
   }
 
   return 0;
}


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 17-01-2006 à 11:40:57    

shreck a écrit :

salut a tous, alors voila je suis en train de faire un petit programme en C (je débute)
le but de ce programme et dappliquer un pasque de sous réseau a une adresse
voila mon source :
 

Code :
  1. #include <stdio.h>
  2. char octet[8],mask[8],application;
  3. int i;
  4. main()
  5. {
  6. printf("saisir le masque : \n" );
  7. scanf(" %s", &mask);
  8. printf("saisir l'octet : \n " );
  9. scanf(" %s", &octet);
  10. application="";
  11.  for (i=1;i<=8;i++);
  12.  {
  13.   if (octet[i]=mask[i])
  14.    { application = application && "1" ;}
  15.   else
  16.    { application = application && "0" ;}
  17.  }
  18. return 0;
  19. }




 
Hum... si je lis bien ton algo (c'est pas évident car il me faut interpréter tes intentions en fonctions des instructions "aléatoires" que tu as tapées) alors celui-ci implique qu'on saisisse seulement un octet de l'adresse (qui en fait quand-même 4) et que la saisie se fasse en binaire...
 
Commence par bien lire les bouquins de C. Ensuite, pour ton exercice, intéresse-toi à l'opérateur mathématique "&" qui travaille sur chaque bit de ses opérandes =>
Ex: 6 & 5 = 110(2) & 101(2) = 100(2) = 4


Message édité par Sve@r le 17-01-2006 à 11:45:46

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed