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 :

Annuaire telephonique


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut Annuaire telephonique
    Bonjour,

    J'essaye de créer un annuaire téléphonique,en suivant
    les informations d'un site.http://www.telechargercours.com/prog...es-structures/

    Et j'ai déja un petit problème, c'est à dire que je voudrais pouvoir saisir
    le nom et le numéro de téléphone d'une personne mais je n'y arrive pas.
    (je débute avec les structures)

    Je vous remercie d'avance pour votre aide !

    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
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Personne Personne;
    struct Personne{
      char nom[32];
      int num[16];
    };
     
    typedef struct Carnet Carnet;
    struct Carnet{
      int Personne[20];
      int n;//compteur indique le nombre de persone dans le tableaux
    };
     
    void creer(Personne p2);
     
     
    int main()
    {
        Personne p1;
        creer(Personne p1);
     
        return 0;
    }
     
    void creer(Personne p2)
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%c", p2->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%d", p2->num);
     
    }

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    et bienvenue sur nos forums

    Commençons par le commencement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creer(Personne p2);
    Possible mais la modification ne sera pas propagée à la variable au retour de la fonction appelante, vaut mieux passer un pointeur comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creer(Personne * p2);
    et dans le main ton appel se fera alors ansi:
    Donc ici on passe l'adresse de la variable pour que les modifications soient prises en compte lorsque la fonction sera finie. L'appel comme tu l'as fait est faut car tu passes le type de la variable en plus or, ce n'est pas comme ça qu'on fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void creer(Personne * p2)
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%c", p2->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%d", p2->num);
    }
    Je n'aime pas scanf, surtout lorsqu'on débute comme toi, utilise plutôt la fonction fgets qui elle au moins est sécurisée. En t'orientant sur cette fonction, je te fait alors la remarque que le numéro de téléphone peut aussi être stocké dans un tableau de char, ce qui est plus logique, aucun intérêt à ce que ce soit dans un tableau d'entiers, du moins pour le moment et au pire des cas, tu pourras toujours convertir la chaîne en valeur numérique si besoin.

    Donc je te fait modifier ta structure ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Personne{
      char nom[32];
      char num[16];
    };
    Et ta fonction de saisie comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void creer(Personne * p2)
    {
        printf("saisir le nom de cette personne:\n");
        fgets (p2->nom, 32, stdin);
        printf("saisir le numero de cette personne:\n");
        fgets (p2->num, 16, stdin);
    }
    Prend également l'habitude d'utiliser des constante symbolique lorsque tu utilises des tableaux statiques comme ici, surtout lorsque tu es amené à utiliser les même valeurs que la taille des tableau lors des saisies ou autres donc tu pourrais avoir deux constante que tu déclares en début de code juste après tes include:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define NOM 32
    #define TEL 16
    Que tu peux utiliser ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Personne{
      char nom[NOM];
      char num[TEL];
    };
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void creer(Personne * p2)
    {
        printf("saisir le nom de cette personne:\n");
        fgets (p2->nom, NOM, stdin);
        printf("saisir le numero de cette personne:\n");
        fgets (p2->num, TEL, stdin);
    }
    C'est ce qu'il faut faire si tu veux un code plus lisible et plus maintenable car le jour où tu veux modifier une de ces valeurs, tu n'auras à le faire que sur ta constante c'est tout, plus besoin de parcourir tout le code pour modifier x fois la même valeur

    Pour la déclaration de tes structures, tu peux au lieu de faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct Personne Personne;
    struct Personne{
      char nom[32];
      char num[16];
    };
    faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
      char nom[32];
      char num[16];
    }Personne;
    C'est pareil mais tu économise une instruction et c'est plus lisible je trouve.

    Je pense en effet que tu as encore beaucoup à lire sur le C, j'espère seulement que tu l'as étudié une première fois en lisant entièrement ton livre et non pas que tu te sois arrêté à certains concepts en te disant que le reste aller venir sur le tas
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Bonjour,

    Dans l'exercice, il est dit:

    Créer une structure Personne pouvant contenir ces informations (nom et téléphone). Le nom peut contenir 32 caractères et le numéro 16 caractères.
    Mais, en C, une chaine de caractère se termine toujours par le caractère \0, donc, en tenant compte des remarques de Franck.H, nous aurons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
      char nom[NOM+1];
      char num[TEL+1];
    }Personne;
    Il n'y a pas que ça, mais autant commencer par avoir un bon code pour l'entrée des valeurs
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Pour ce qui est de l'apprentissage du C, j'en ai déjà fait pas mal en DUT GEII et en stage,mais il n'y avait pas vraiment de structure et pointeur(Le seul langage haut niveau qu'on a bien approfondis c'est le JAVA).
    Je n'ai pas vraiment de livre j'apprends avec divers site sur internet, et le problème c'est qu'il ne développe pas vraiment des exemples proche de ce que je fais.

    Pour ce qui est du projet de l'annuaire, la j'ai remis le programme à jour mais cette fois ci on me demande de crée une fonction qui ajoute un nouveau personnage et je ne vois pas comment faire ...

    Rq: j'ai laissé le scanf juste parce que j'ai l'habitude de travailler avec.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
      char nom[NOM];
      char num[NUM];
    }Personne;
     
     
    typedef struct{
      int Personne[20];
      int n;//compteur indique le nombre de persone dans le tableaux
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn);
    void creer(Personne *p2);
    void AfficheP(Personne *pAf);
     
    /**Principale***/
    int main()
    {
        Personne p1;//Personne p1 est un pointeur ?
     
        Initialiser(&p1);
     
        creer(&p1);//car on envoi une @
        AfficheP(&p1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn)
    {
        char i;
     
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
    }
     
    void creer(Personne *pCr)
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void Add(Personne *pAj)
    {
     
    }

  5. #5
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Alors, plusieurs points:

    0/ Après comme te l'as fait remarquer Franck.H et edgarjacobs, tu veux 32 et 16 caractères pour NOM et NUM. Il faut donc mettre un +1 dans tes tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char nom[NOM+1];
    char num[NUM+1];
    Il y a le \0 à prendre en compte comme dernière case!
    0'/ Et non Personne n'est pas un pointeur ^^ Tu as défini la structure comme étant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct Personne
    . Il n'y a pas d'étoiles à ce que je peux voir.
    Si ce qui t'intrigue est le &p1 dans l'entrée de toutes tes fonctions c'est parce que tu les as définies telles qu'elles acceptent en entrée un pointeur qui est l'adresse d'un élément et donc tu envoie &p1 <=> l'adresse de p1, ta personne
    0''/ Cool! Tu as une fonction d'initialisation c'est assez rare d'en voir une
    Essaye d'initialiser ton Carnet par la même occasion, comme ça pas besoin de créer une nouvelle fonction d'initialisation pour ton carnet.
    1/ Pense aux indentations si c'est pas le cas (je te dis ça parce que je vois tout sur la même ligne ^^)
    2/ Tu as déjà fait l'entête de ta fonction: c'est simple propre et tout bon
    2'/ Change peut être juste le nom en AddP comme tu as nommé les autres fonctions
    3/ Oublie pas du coup son prototype dans ta liste de prototypes en haut du programme
    4/ Ensuite comment remplir ta fonction c'est ça? Qu'est ce que tu dois faire pour ajouter une personne a ton annuaire? Créer son nom et numéro de téléphone ET ensuite l'ajouter a ton répertoire (appel a la fonction creerP puis ajouter cette personne dans le tableau de ta structure, et bien évidemment ne pas oublier d'incrémenter ton n puisque tu as pris une place pour enregistrer un nouveau contact)

    Voilou, à toi d’implémenter et bonne chance

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    J'ai essayé de faire quelque chose, la fonction AfficheC ne marche pas du tout
    et addP marche mais je suis pas sur que mon stockage dans le carnet fonctionne.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn,Carnet *cIn);
    void creerP(Personne *p2);
    void AfficheP(Personne *pAf);
    void AddP(Personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        Personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn,Carnet *cIn)//Mise à 0
    {
        char i;
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
        for(i=0;i<19;i++)
        {
        cIn->Personne[i]=0;
        }
        cIn->n=0;
    }
     
    void creerP(Personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(Personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->Personne[cAj->n]=pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n"((cLecture->Personne[i]).nom),((cLecture->Personne[i]).num));
        }
    }

  7. #7
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n"((cLecture->Personne[i]).nom),((cLecture->Personne[i]).num));
        }
    }
    Pourquoi un char?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (cLecture->Personne[i]).nom
    // et 
    (cLecture->Personne[i]).num)
    Tu cherches à renvoyer quelle valeur ici?

    EDIT: Pour les réponses que tu vas avoir au-dessus, je te donne une indication de ce qu'il va falloir changer ensuite

    Indice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
    Tu as créés un tableau nommé Personne contenant des int, alors qu'un Carnet est censé contenir des Personnes Donc il faut revoir le type de ton tableau je pense

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    J'ai essayé de faire quelque chose, la fonction AfficheC ne marche pas du tout
    et addP marche mais je suis pas sur que mon stockage dans le carnet fonctionne.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn,Carnet *cIn);
    void creerP(Personne *p2);
    void AfficheP(Personne *pAf);
    void AddP(Personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        Personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn,Carnet *cIn)//Mise à 0
    {
        char i;
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
        for(i=0;i<19;i++)
        {
        cIn->Personne[i]=0;
        }
        cIn->n=0;
    }
     
    void creerP(Personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(Personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->Personne[cAj->n]=pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n"((cLecture->Personne[i]).nom),((cLecture->Personne[i]).num));
        }
    }
    Salut

    D'après ce que je vois, tu stockes tout en mémoire. Ne voudrais-tu pas plutôt stocker ton carnet dans un fichier disque ???

    Citation Envoyé par Bysbobo Voir le message
    Pourquoi un char?
    Bah, c'est un nombre compris entre -128 et 127 donc pour compter de 0 à 20 ça le fait. Perso j'aurais plutôt demandé "pourquoi ne pas le mettre unsigned" mais moi ça ne me dérange pas d'utiliser un char comme tinyint...
    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]

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (cLecture->Personne[i]).nom)
    ((cLecture->Personne[i]).num)
    Pour ce qui est de cette ligne de code (en considérant i=0), je souhaiterais que ça affiche le nom de la personne n°1 et son numéro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];// ou Personne Personne[20]
        int n;//compteur indique le nombre de personne dans le tableau
    }Carnet;
    Pour ce qui est de ce code, il faut changer le int en Personne ?

    Et si je n'utilise pas les fichiers, c'est que je maîtrise très mal cette notion, je m'en occuperai après avoir bien compris les structures.

    Je vous remercie encore pour votre aide !

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (cLecture->Personne[i]).nom)
    ((cLecture->Personne[i]).num)
    Pour ce qui est de cette ligne de code (en considérant i=0), je souhaiterais que ça affiche le nom de la personne n°1 et son numéro.
    Pas de souci. Sauf que les parenthèses sont inutiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s a pour numéro %s\n", cLecture->Personne[i].nom, cLecture->Personne[i].num);
    Citation Envoyé par bouritosse Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
        int Personne[20];// ou Personne Personne[20]
        int n;//compteur indique le nombre de personne dans le tableau
    }Carnet;
    Pour ce qui est de ce code, il faut changer le int en Personne ?
    Ben oui. Tu veux déclarer un tableau de 20 personnes et non de 20 int !!!

    Perso je conseillerais de nommer les types "t_carnet" et "t_personne" comme le veulent les conventions de nommage...

    Citation Envoyé par bouritosse Voir le message
    Et si je n'utilise pas les fichiers, c'est que je maîtrise très mal cette notion, je m'en occuperai après avoir bien compris les structures.
    Pas de souci. Continue à travailler modulaire (comme tu fais) et ensuite tu pourras facilement adapter...
    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]

  11. #11
    Membre régulier Avatar de Mipwiq
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 42
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Je te conseil de regarder un peu la notion de liste chainée, c'est un petit truc de C qui change la vie lorsque tu fais des projets où il faut ajouter/retirer des éléments, pour un carnet de contacts je trouve que cette méthode est appropriée, et c'est une notion qui te permettra de mieux comprendre les pointeurs et les structures.

    Tu pourrais tout aussi bien utiliser des tableaux de structures que tu agrandirais à chaque fois que tu veux ajouter une personne, mais l'allocation dynamique dans ce genre de cas n'est pas spécialement pratique.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    J'ai corrigé la ligne, par contre il me dit toujours qu'il y'a une erreur à la ligne 90 de mon code, peut être à cause de la fonction AddP ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s a pour numéro %s\n", cLecture->Personne[i].nom, cLecture->Personne[i].num);

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }t_personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(t_personne *pIn,Carnet *cIn);
    void creerP(t_personne *p2);
    void AfficheP(t_personne *pAf);
    void AddP(t_personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
    void AfficheC(Carnet *cLecture);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        t_personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(t_personne *pIn,Carnet *cIn)//Mise à 0
    {
        char i;
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
        for(i=0;i<19;i++)
        {
        cIn->Personne[i]=0;
        }
        cIn->n=0;
    }
     
    void creerP(t_personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);//pCr->nom <=> (*pCr).nom
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(t_personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(t_personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->Personne[cAj->n]=pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n",cLecture->Personne[i].nom,cLecture->Personne[i].num);
        //Affiche le nom et numéro de chacun des éléments du tableaux Personne[20]
        }
    }

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je te conseille de reconsidérer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
    Ici Personne est un tableau d'entiers et non de t_personne.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Ah oui mince, c'est la fatigue

    La j'ai bien tout repris, mais il me dit que la ligne 80 est fausse
    "incompatibles type of assignement"

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }t_personne;
     
     
    typedef struct{
        t_personne Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(t_personne *pIn,Carnet *cIn);
    void creerP(t_personne *p2);
    void AfficheP(t_personne *pAf);
    void AddP(t_personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
    void AfficheC(Carnet *cLecture);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        t_personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(t_personne *pIn,Carnet *cIn)//Mise à 0
    {
        unsigned char i;
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
    //    for(i=0;i<20;i++)
    //    {
    //    cIn->Personne[i]=0;
    //    }
        cIn->n=0;
    }
     
    void creerP(t_personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);//pCr->nom <=> (*pCr).nom
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(t_personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(t_personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->Personne[cAj->n]=pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        unsigned char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n",cLecture->Personne[i].nom,cLecture->Personne[i].num);
        //Affiche le nom et numéro de chacun des éléments du tableaux Personne[20]
        }
    }

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ici tu passes en argument un pointeur sur t_personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void AddP(t_personne *pAj,Carnet *cAj)
    or, cAj->Personne[cAj->n] n'est pas un pointeur. D'où l'erreur.

    cAj->Personne[cAj->n] = *pAj;.

    Remarques :
    • dans AfficheC, ce serait mieux de prendre cAj->n à la place de 20.
    • dans Initialiser, préfère utiliser les constates define.

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct {
        ...
    }t_personne;
    
    typedef struct{
       ...
    }Carnet;
    Quand je t'ai conseillé de nommer ton type "t_personne" ; je pensais que tu ferais intelligemment l'analogie avec l'autre structure de type "Carnet" !!!
    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]

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Désolé, j'étais un peu trop fatigué la dernière fois.

    J'ai repris le code mais il y'a deux points que je ne comprends pas:
    -dans l'initialisation je souhaiterais mettre mon tableau de Personne à 0(ligne 59)
    -Dans ma fonction Del je souhaiterais mettre à 0 les une colonne du tableau
    choisit par l'utilisateur. Or, mettre égale à 0 ne fonctionne pas ... (ligne 102-103)

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
         Personne t_personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn,Carnet *cIn);
    void creerP(Personne *p2);
    void AfficheP(Personne *pAf);
    void AddP(Personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
    void AfficheC(Carnet *cLecture);
    void Del(Carnet *cDel);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        Personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn,Carnet *cIn)//Mise à 0
    {
        unsigned char i;//type unsigned-> rien <0 donc 2^8=de 0 à 256
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
        for(i=0;i<20;i++)
        {
        cIn->t_personne[i]=0;
        }
        cIn->n=0;
    }
     
    void creerP(Personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);//pCr->nom <=> (*pCr).nom
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(Personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->t_personne[cAj->n]= *pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        unsigned char i;
     
        for(i=0;i<cLecture->n;i++)
        {
        printf("%s a pour numero %s \n",cLecture->t_personne[i].nom,cLecture->t_personne[i].num);
        //Affiche le nom et numéro de chacun des éléments du tableaux Personne[20]
        }
    }
     
    void Del(Carnet *cDel)
    {
        unsigned char suppr;
     
        printf("Quelle ligne du carnet voulez vous supprimer ?\n");
        scanf("%c",&suppr);
        cDel->t_personne[suppr].nom=0;
        cDel->t_personne[suppr].num=0;
     
     
    }

  18. #18
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    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
     
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
    /*...*/
    void Del(Carnet *cDel)
    {
        unsigned char suppr;
     
        printf("Quelle ligne du carnet voulez vous supprimer ?\n");
        scanf("%c",&suppr);
        cDel->t_personne[suppr].nom=0;
        cDel->t_personne[suppr].num=0;
     
     
    }
    L'écriture est bonne jusqu'au '='.
    Mais tu as défini comment ton nom et numéro de la personne dans ta structure?

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Je l'ai définis en char, j'ai déjà essayé de mettre ={'0'} mais ça marche pas

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    oups, j'ai rien dit c'est un tableau oko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MCD] MCD d'un projet d'annuaire telephonique
    Par rinas dans le forum Schéma
    Réponses: 7
    Dernier message: 10/12/2014, 06h10
  2. Réponses: 1
    Dernier message: 08/08/2014, 03h22
  3. Réponses: 2
    Dernier message: 21/06/2008, 11h01
  4. méthode à utiliser pour annuaire
    Par psyco2604 dans le forum ASP
    Réponses: 2
    Dernier message: 01/06/2004, 15h46

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