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 :

Création d'un annuaire téléphonique


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut Création d'un annuaire téléphonique
    Bonjour,
    le but de l'exercice est de lire un annuaire téléphonique mais en compilant il me sort invalif type argument of ->. quel est mon erreur ?
    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
    22
    23
    24
    25
    #include<stdio.h>
    #include<stdlib.h>
     
    struct fiche{
      char nom[50];
      char prenom[30];
      char tel[40];
    }; 
     
     
     
     
     
    void affiche(struct fiche *f){
      int i;
        for (i=0;i<3;i++){
          printf("personne: %s %s  %s\n",f[i]->nom,f[i]->prenom,f[i]->tel);
        }
    }
     
    int main(){
      struct fiche f[3]={{"alpha","jean","44719"},{"beta","alain","442749"},{"omega","sophie","344757"}};
      affiche(f);
      return 0;
    }
    j'arrive à l'afficher en utilisant ce 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
    20
    21
    22
    23
    24
    25
    #include<stdio.h>
    #include<stdlib.h>
     
    struct fiche{
      char nom[50];
      char prenom[30];
      char tel[40];
    }; 
     
     
     
     
     
    void affiche(struct fiche *f){
      int i;
        for (i=0;i<3;i++){
          printf("personne: %s %s  %s\n",f[i].nom,f[i].prenom,f[i].tel);
        }
    }
     
    int main(){
      struct fiche f[3]={{"alpha","jean","44719"},{"beta","alain","442749"},{"omega","sophie","344757"}};
      affiche(f);
      return 0;
    }
    mais si j'ai bien comprit mon cour quand on utilise le . on ne modifie les données uniquement dans la fonction(main ou autre) ou on l'utilise contrairement à ->.
    Donc dans mes cours le professeur n'utilise que -> mais je n'y arrive pas
    Peut t'on m'expliquer comment fonctionne le -> et pourquoi dans mon exemple cela ne fonctionne pas?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Delnir Voir le message
    mais si j'ai bien comprit mon cour quand on utilise le . on ne modifie les données uniquement dans la fonction(main ou autre) ou on l'utilise contrairement à ->.
    Donc dans mes cours le professeur n'utilise que -> mais je n'y arrive pas
    Peut t'on m'expliquer comment fonctionne le -> et pourquoi dans mon exemple cela ne fonctionne pas?
    T'as pas bien compris ton cours

    L'opérateur "." (point) permet d'accéder aux membres d'une variable de type "struct"
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct s_coord {
        int x;
        int y;
    };
     
    struct s_coord point={2, 3};
     
    printf("x=%d, y=%d\n", point.x, point.y);
    L'opérateur "->" (flèche) permet d'accéder aux membres d'une variable de type "struct étoile"
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct s_coord point={4, 5};
    struct s_coord *adr;
    adr=&point;
     
    printf("x=%d, y=%d\n", adr->x, adr->y);
    En fait, la flèche est un raccourci syntaxique pour (*adr).x qui signifie "le membre x du pointé adr"

    Maintenant, toi tu utilises la notation [] parce que l'adresse que tu reçois correspond à non pas une structure mais une suite de structures accolées en mémoire (un tableau quoi). Du point de vue du C, c'est la même chose. Que l'adresse corresponde au point de déprt d'une seule structure ou d'un ensemble de structures, une adresse reste une adresse.
    Or, la notation tab[i] peut s'écrire aussi *(tab + i). Donc comme la notation [] équivaut à *, tu entres directement dans l'écriture (*adr).x d'où le point que t'es obligé de mettre et non la flèche.

    Si t'as envie d'avoir la flèche, voilà comment il te faut écrire ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void affiche(struct fiche *f){
      int i;
        for (i=0;i<3;i++){
          printf("personne: %s %s  %s\n",(f + i)->nom,(f + i)->prenom,(f + i)->tel);
        }
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    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 Delnir Voir le message
    mais si j'ai bien comprit mon cour quand on utilise le . on ne modifie les données uniquement dans la fonction(main ou autre) ou on l'utilise contrairement à ->.
    Donc dans mes cours le professeur n'utilise que -> mais je n'y arrive pas
    Peut t'on m'expliquer comment fonctionne le -> et pourquoi dans mon exemple cela ne fonctionne pas?
    f est un pointeur sur structure, mais f[i] n'est pas un pointeur, c'est une structure, d'où le '.' au lieu du '->' :
    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
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include<stdio.h>
    #include<stdlib.h>
     
    struct fiche
    {
       char nom[50];
       char prenom[30];
       char tel[40];
    };
     
    void affiche (struct fiche *f)
    {
       int i;
       for (i = 0; i < 3; i++)
       {
          printf ("personne: %s %s  %s\n", f[i].nom, f[i].prenom, f[i].tel);
       }
    }
     
    int main (void)
    {
       struct fiche f[3] =
          { {"alpha", "jean", "44719"}, {"beta", "alain", "442749"}, {"omega",
                                                                      "sophie",
                                                                      "344757"} };
       affiche (f);
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. la base de donnée de la création d'un annuaire
    Par conique20 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 11/03/2008, 10h57
  2. API annuaire téléphonique
    Par Alex06 dans le forum 4D
    Réponses: 2
    Dernier message: 31/05/2007, 15h41
  3. [Conception] Création d'un "annuaire"
    Par pouyoudu17 dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2007, 10h48
  4. construire un annuaire téléphonique
    Par batalich dans le forum C
    Réponses: 7
    Dernier message: 13/03/2007, 23h41
  5. [MCD] Modéliser un annuaire téléphonique
    Par allowen dans le forum Schéma
    Réponses: 9
    Dernier message: 20/10/2005, 10h23

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