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 :

problème de saisie dans un menu en mode console


Sujet :

C

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut problème de saisie dans un menu en mode console
    bonjour, j'ai un problème avec mon programme, que je réalise d'après les exercices de cette page :
    http://inferno.cs.univ-paris8.fr/~am...12.html#ss12.5
    La première partie, c'est à dire les questions 1 , 2 , 3 , 4 , 5 , 6 , 7 sont bien faites, mais le reste ne marche pas. Je poste mon premier code dans le fichier struct_1234567.c et celui qui pose problème dans le fichier struct_8.c.

    Voilà le code de struct_8.c :

    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
    /***************************************************************************
     *            struct.c
     *
     *  Sun Jan 27 12:05:36 2008
     *  exercice issu de http://inferno.cs.univ-paris8.fr/~am/tutorial/C/Cours-12.html#ss12.5
     ****************************************************************************/
     #include <stdlib.h>
     #include <stdio.h>
     #include <string.h>
     
     
    struct Personne
    {
        char nom[32];
        char num_tel[16];
    };
     
    struct Carnet
    {
        struct Personne annuaire[20];
        int compteur;
    };
     
    struct Personne cree_personne(char *, char*);
     
    void affiche_carnet(struct Carnet carnet_in);
     
    void purger(void);
     
    int main(void)
    {
        int i;
        struct Carnet mon_carnet;
        char nom[32];
        char tel[16];
        int choix;
        mon_carnet.compteur=0;
     
        do{
            puts("0: quitter le programme");
            puts("1: ajouter une entree");
            puts("2: voir le carnet entier");
            choix = fgetc(stdin);
            purger();
            if(choix=='1')
            {
                puts("nom ? ");
                fgets(nom,32,stdin);
                puts("tel. ? ");
                fgets(tel,16,stdin);
                mon_carnet.annuaire[i]=cree_personne(nom,tel);
                mon_carnet.compteur++;
            }
            else if(choix=='2')
            {
     
                    affiche_carnet(mon_carnet);
            }
     
        }while(!(choix=='0'));
        puts("appuyez sur une touche pour continuer");
        getchar();
        return 0;
    }
     
     
    struct Personne cree_personne(char nom[], char num_tel[])
    {
        struct Personne resultat;
        strncpy(resultat.nom,nom,32);
        strncpy(resultat.num_tel,num_tel,16);
        return resultat;
    }
     
    void affiche_carnet(struct Carnet carnet_in)
    {
        int i;
        struct Personne personne_in;
        for(i=0;i<carnet_in.compteur;i++)
        {
            personne_in=carnet_in.annuaire[i];
            printf("nom : %s , tel : %s\n",personne_in.nom,personne_in.num_tel);
        }
    }
     
    void purger(void)
    {
        int c;
        while( (c=getchar())!='\n' && c!=EOF );
    }

  2. #2
    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
    La variable i utilisée comme index du tableau mon_carnet.annuaire n'est pas initialisée ni modifiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(void)
    {
    ...
            if(choix=='1')
            {
    ...
                mon_carnet.annuaire[mon_carnet.compteur]=cree_personne(nom,tel);
                mon_carnet.compteur++;
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    Je vous remercie, ça fonctionne à présent. Voilà la code revue et corrigé :

    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
    /***************************************************************************
     *            struct.c
     *
     *  Sun Jan 27 12:05:36 2008
     *  exercice issu de http://inferno.cs.univ-paris8.fr/~am/tutorial/C/Cours-12.html#ss12.5
     ****************************************************************************/
     #include <stdlib.h>
     #include <stdio.h>
     #include <string.h>
     
     
    struct Personne
    {
        char nom[32];
        char num_tel[16];
    };
     
    struct Carnet
    {
        struct Personne annuaire[20];
        int compteur;
    };
     
    struct Personne cree_personne(char *, char*);
     
    void affiche_carnet(struct Carnet carnet_in);
     
    void purger(void);
     
    int main(void)
    {
        struct Carnet mon_carnet;
        char nom[32];
        char tel[16];
        int choix;
        mon_carnet.compteur=0;
     
        do{
            puts("0: quitter le programme");
            puts("1: ajouter une entree");
            puts("2: voir le carnet entier");
            choix = getchar();
            purger();
            if(choix=='0')
            {
                puts("fin du programme");
            }
            if(choix=='1')
            {
                puts("nom ? ");
                fgets(nom,32,stdin);
                puts("tel. ? ");
                fgets(tel,16,stdin);
                mon_carnet.annuaire[mon_carnet.compteur]=cree_personne(nom,tel);
                mon_carnet.compteur+=1;
            }
            if(choix=='2')
            {
                    affiche_carnet(mon_carnet);
            }
        }while(!(choix=='0'));
        puts("appuyez sur une touche pour continuer");
        getchar();
        return 0;
    }
     
     
    struct Personne cree_personne(char nom[], char num_tel[])
    {
        struct Personne resultat;
        strncpy(resultat.nom,nom,32);
        strncpy(resultat.num_tel,num_tel,16);
        return resultat;
    }
     
    void affiche_carnet(struct Carnet carnet_in)
    {
        int i;
        struct Personne personne_in;
        for(i=0;i<carnet_in.compteur;i++)
        {
            personne_in=carnet_in.annuaire[i];
            printf("nom : %s , tel : %s\n",personne_in.nom,personne_in.num_tel);
        }
    }
    Au revoir.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2007, 17h37
  2. Réponses: 14
    Dernier message: 12/04/2007, 21h09
  3. Problème de saisie dans un menu
    Par IDE dans le forum C
    Réponses: 7
    Dernier message: 09/04/2007, 19h47
  4. Problème de raccoucis dans un menu
    Par taichitof_deutschlan dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 27/02/2007, 17h44
  5. problème de couleur dans le Menu [MainMenu - ImageList]
    Par alec_002 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 01/09/2005, 16h29

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