IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

petit problème avec pointeurs


Sujet :

C

  1. #1
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut petit problème avec pointeurs
    Bonsoir,

    J'utilise des pointeurs dans une fonction mais à la compilation il me dit que le code n'est pas correct.

    Alors cette fonction doit mettre à jour un élément dans une pile que j'ai crée.
    Elle recoit donc en parametre 2 données à mettre à jour dans une structure interne à la pile.Mais tout d'abord il doit rechercher l'élément à mettre à jour.
    Pour l'instant j'utilise un entier passé en parametre lors de l'appel de la fonction.

    Alors j'ai deux questions :
    1- Il y aurait pas un autre moyen autre que mettre un entier pour savoir quel élément de la pile qui doit etre mis à jour ?
    2- Pourquoi ai-je des erreurs de compilation pour les pointeurs ?

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void modifier (tab_robot *p,int ligne,int col,int nb){ 
         maillon *q;
         q=*p;int j=1;
         while(j++<nb)
            q= q->suiv;
         q->ligne=ligne; 
         q->col=col;
    }
    Et merci d'avance d'y porter attention

  2. #2
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut Re: petit problème avec pointeurs
    Citation Envoyé par Kerod
    Bonsoir,
    2- Pourquoi ai-je des erreurs de compilation pour les pointeurs ?
    A tu bien mis pour malloc,free,.. ?

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    2- Pourquoi ai-je des erreurs de compilation pour les pointeurs ?[
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void modifier (tab_robot *p,int ligne,int col,int nb){ 
         maillon *q; 
         q=*p;....
    *p est un tab_robot et q un pointeur sur maillon. Les types sont très probablement incompatibles. Il faut connaître la déclaration de maillon et de tab_robot pour trancher
    1- Il y aurait pas un autre moyen autre que mettre un entier pour savoir quel élément de la pile qui doit etre mis à jour ?
    Il faudrait avoir plus de détails. Mais repérer un élément d'une pile par sa position d'empilement semble une idée bizarre
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    ah oui désolé j'ai oublié le plus important :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct {
    	char nom;
    	int energie;
    }cases;
     
    typedef struct {
    	int ligne;
    	int col;
    	struct maillon *suiv;
    }maillon;
     
    typedef maillon *tab_robot;

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maillon *q;
         q=*p;int j=1;
    En C standard, tu n'as pas le droit de declarer les variables locales apres une instruction... Il faut commencer avec les declarations...

    Les compilateurs sont plus ou moins embetants pour ca...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le C99 reste du C standard, et en C99, on peut.

    Par contre, trop de compilos ne le supportent pas encore...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Oui ce n'est pas de là que vient mon problème mais plutot du coté pointeur

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct { 
       int ligne; 
       int col; 
       struct maillon *suiv; 
    }maillon;
    Certains compilateus n'aiment pas ce genre de choses et n'identifient pas struct maillon avec maillon. ils préfèrent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct mm{ 
       int ligne; 
       int col; 
       struct mm *suiv; 
    }maillon;
    Peut être est-ce la cause de tes problèmes. Le message d'erreur à la compilation pourrait aider à le savoir
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par diogene
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct { 
       int ligne; 
       int col; 
       struct maillon *suiv; 
    }maillon;
    Certains compilateus n'aiment pas ce genre de choses et n'identifient pas struct maillon avec maillon.
    C'est pire que ça. C'est carrément du C incorrect.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Alors j'ai modifié et voici le code que ca me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*Définition de la pile robot*/
     
    typedef struct ssmaillon{
    	int ligne;
    	int col;
    	struct ssmaillon *suiv;
    }maillon;
     
    typedef maillon *tab_robot; 
    /*Fonction qui modifie un élément de la pile*/
     
    void modifier (tab_robot *p,int ligne,int col,int nb){ 
     
         maillon *q;
         q=*p;int j=0;
         while(j++<nb)
            q= q->suiv;
         q->ligne=ligne; 
         q->col=col;
     
    }

  11. #11
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Bon j'ai à nouveau modifier et là ca fonctionne...Mais il reste un petit problème, mes valeurs ne sont pas modifiés comme elles devraient l'etre pourquoi ?!

  12. #12
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Mais il reste un petit problème, mes valeurs ne sont pas modifiés comme elles devraient l'etre pourquoi ?!
    Peux tu préciser ce qui se passe
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  13. #13
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    en fait c'est bon j'ai trouvé la solution, j'ai finalement fais comme ceci et ca fonctionne pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void modifier (tab_robot *p,int old_ligne,int old_col,int new_ligne,int new_col){ 
     
         maillon *q;
         q=*p;
         while((q)->ligne!=old_ligne || (q)->col!=old_col){
            printf("%d %d\n",q->ligne,q->col);q= q->suiv;}
         q->ligne=new_ligne; 
         q->col=new_col;
     
    }
    Mais je me demande une chose...Je recherche dans ma pile la ligne et la col mais quand je mets dans le while le && il fait nimporte koi...
    par exemple j'ai dans ma pile :
    3 7
    9 3
    2 3

    je veux remplacer le 2 3 par 3 2 et bien il s'arrete à 9 3 et remplace ces valeurs au lieu du 2 3

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème avec les pointeurs et variable
    Par mitherkiller dans le forum C
    Réponses: 5
    Dernier message: 09/03/2007, 22h05
  2. Réponses: 4
    Dernier message: 15/10/2006, 18h05
  3. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 12h47
  4. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 18h45
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo