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 :

Lecture de tableau par pointeur [Débutant(e)]


Sujet :

C

  1. #1
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut Lecture de tableau par pointeur
    Bonjour,

    Depuis quelques temps j'essai de me former à l'ANCI_C au C, http://www.linux-kheops.com/doc/ansi-c/node44.htm

    mais je but sur un exo concernant la lecture de tableau à l'aide de pointeurs
    En fait mon code est conforme au résultat de l'exercice, mais la compilation ne passe pas.
    J'obient ce message pour les line 7 et 8
    The declaration specifier is missing

    Les lignes 7 et 8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pdeb = &t[0];                                                 
    pfin = &t[N-1];
    Le code complet
    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
     
    #include <stdio.h>                                            
    #define N 10                                                  
    int t[N]={1,2,0,4,5,0,6,7,8,0};                               
    int *pdeb;                                                    
    int *pfin;                                                    
    int *p;                                                       
    pdeb = &t[0];                                                 
    pfin = &t[N-1];                                               
    /*-- fonction de lecture du tableau t */                      
    void li_tab() {                                               
      for ( p=pdeb; p<=pfin; p++)                                 
         if ( *p =='0')                                           
            printf("le %d ieme element du tableau est null\n",p); 
    }                                                             
    /*------ programme principal   --------*/                     
    main() {                                                      
    li_tab();
    J'ai bon relire reverifier je ne comprend pas ce qui cloche.
    C'est comme si le type de pdeb ou pfin n'était pas reconnu...
    Quelqu'un as peut-il m'expliquer ?
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Déjà ceci est faux :*p =='0'

    Bonne relecture

    Et sinon met tout ton code, ça sera plu simple à lire et à voir comment tu as écrit tout ça.

    De plus, tu as apparament tout déclarer en variable globale, ce qui n'est pas fait dans l'exo corrigé.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  3. #3
    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
    De plus, qu'est-ce que c'est que toutes ces variables globales ?

    Edit: Tiens, la voilà, l'erreur: Les lignes 7 et 8 ne sont pas des déclarations, mais des instructions.
    Et les instructions, ce n'est pas censé exister à l'extérieur des fonctions...
    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.

  4. #4
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    J'ai tenu compte de vos remarques (*p==0) ainsi que des variables qui étaient mise en globales.
    Avant de poster ce méssage j'ai fais ma compile est c'est OK !!!
    Par contre je comprend pas pourquoi.
    Est-ce le fait que mes pointeurs etaient dans la partie globale ?
    Voici la totalité du code
    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
     
    #include <stdio.h>                                            
    #define N 10                                                  
    int t[N]={1,2,0,4,5,0,6,7,8,0};                               
    /*-- fonction de lecture du tableau t */                      
    void li_tab() {                                               
      int *pdeb;                                                  
      int *pfin;                                                  
      int *p;                                                     
      pdeb = &t[0];                                               
      pfin = &t[N-1];                                             
      for ( p=pdeb; p<=pfin; p++)                                 
         if ( *p==0)                                              
            printf("le %d ieme element du tableau est null\n",p); 
    }                                                                                                                      
    /*------ programme principal   --------*/                     
    main() {                                                      
    li_tab(); 
    }
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

  5. #5
    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
    C'est le fait que les lignes 7 et 8 étaient hors de toute fonction, alors que c'étaient des instruction et non des déclarations.
    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.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par SPACHFR
    /*------ programme principal --------*/
    main() {
    li_tab();
    }
    [/code]
    Pourquoi j'ai peur quand je lis ça?

    Car le main retourne un int, à corriger et écrit dans la correction de l'exo en plus.

    Sinon, je ne saurais pas t'expliquer correctement, je laisse donc le soin à quelqu'un d'autre l'explication. Qui pour moi n'est pas forcement le fait qu'elle soit globale, mais plutot la maniére que c'était déclarer.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  7. #7
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    OK j'ai compris -> Pas d'instruction en dehors des fonctions ou du main.
    Pour int main() c'est moi qui est fait l'erreur c'est correct dans la correction de l'exo

    Reste un petit problème sur le résultat attendu, mais là c'est de la logique je vais chercher
    Merci pour votre aide
    S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

  8. #8
    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
    Citation Envoyé par SPACHFR
    Pas d'instruction en dehors des fonctions ou du main.
    Le main() est une fonction aussi, tu sais...
    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.

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

Discussions similaires

  1. Modification du contenu d'un tableau par pointeur
    Par africanwinners dans le forum Débuter
    Réponses: 2
    Dernier message: 25/08/2011, 19h27
  2. Passage de tableau à une fonction par pointeur
    Par progfou dans le forum C++
    Réponses: 15
    Dernier message: 23/02/2007, 11h45
  3. Tri de tableau par pointeurs
    Par colocolo dans le forum Pascal
    Réponses: 9
    Dernier message: 19/02/2007, 21h02
  4. Tableau Bidimensionel Géré Par pointeurs
    Par boubyx.G dans le forum C++
    Réponses: 19
    Dernier message: 31/01/2007, 20h13
  5. Réponses: 8
    Dernier message: 10/03/2006, 17h28

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