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


Sujet :

C

  1. #1
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Problème de saisie dans un menu
    Bonjour, j'ai réalisé une fonction Menu(), dans cette fonction je saisi le choix de mon menu avec getche, je voudrais utiliser fgets, mais je ne vois pas bien comment faire merci, voici mon 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
     
    tr_e Menu (void)
    {  
       int a;
     
       gotoxy (1, 7);
       printf ("\t\t1. Ajout d'une fiche\n"
               "\t\t2. Chercher une fiche\n"
               "\t\t3. Afficher une fiche\n"
               "\t\t4. Suppression d'une fiche\n"
    	   "\t\t5. Quitter\n\n" "\t\tEntrez votre choix : "); 
     
       a = ((tr_e) getche ()) - 48;
     
       vider_tempon();
     
       return a;
     
    }

  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
    Citation Envoyé par IDE
    Bonjour, j'ai réalisé une fonction Menu(), dans cette fonction je saisi le choix de mon menu avec getche, je voudrais utiliser fgets, mais je ne vois pas bien comment faire merci, voici mon 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
     
    tr_e Menu (void)
    {  
       int a;
       char buf [10];
     
       gotoxy (1, 7);
       printf ("\t\t1. Ajout d'une fiche\n"
               "\t\t2. Chercher une fiche\n"
               "\t\t3. Afficher une fiche\n"
               "\t\t4. Suppression d'une fiche\n"
    	   "\t\t5. Quitter\n\n" "\t\tEntrez votre choix : "); 
     
       if (fgets (buf, 10, stdin))
       {
          a = (int) strtol (buf, NULL, 10);
       }
     
       vider_tempon();
     
       return a;
     
    }
    Non testé !
    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
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Merci pour ta réponse, pourrais tu m'expliquer en quelques ligne se que tu as fais merci bcp.

  4. #4
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Je viens de tester ton Menu, sa fonctionne parfaitement mais je dois taper deux fois au clavier pour me faire afficher mon choix, j'ai enlever ma fonction vider_tempon() et sa fonctionne normalement, donc quand on utilise fgets on ne doit pas vider la mémoire ???

  5. #5
    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
    Citation Envoyé par IDE
    Merci pour ta réponse, pourrais tu m'expliquer en quelques ligne se que tu as fais merci bcp.
    Oui biensûr pas de problèmes:

    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
    tr_e Menu (void)
    {  
       int a;
       char buf [10];   /*  1.-  */
        
       gotoxy (1, 7);
       printf ("\t\t1. Ajout d'une fiche\n"
               "\t\t2. Chercher une fiche\n"
               "\t\t3. Afficher une fiche\n"
               "\t\t4. Suppression d'une fiche\n"
    	   "\t\t5. Quitter\n\n" "\t\tEntrez votre choix : "); 
     
       if (fgets (buf, 10, stdin))  /*  2.-  */
       {
          a = (int) strtol (buf, NULL, 10);  /*  3.-  */
       }
     
       vider_tempon();
     
       return a;
     
    }
    1. Déclaration d'un buffer temporaire assez grand.
    2. Récupération de la saisie utilisateur donc stdin comme flux (dernier argument de fgets)
    3. Conversion de la chaîne (buf) en entier.
    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 !

  6. #6
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Et pourquoi tu fais un If ?, encore un grand merci pour ton aide c'est bien sympa.

  7. #7
    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
    Citation Envoyé par IDE
    Et pourquoi tu fais un If ?, encore un grand merci pour ton aide c'est bien sympa.
    Bin pour tester le retour de fgets. Il faut toujours vérifier la valeur de retour des fonctions pour le cas où elles échoues. Ici, si fgets n'arrive pas à récupérer de données sur le flux donné hé bien elle renvoie NULL.

    Le fait de tester ceci permet d'éviter des comportement indéterminé ou des crash du programme (segfault et autre) car à la base le buffer temporaire n'est pas initialisé et de plus, si fgets échoue on épargne du travail inutile au processeur !

    Par ailleurs il faudrais initialiser a avec une valeur par défaut lors de sa déclaration, c'est préférable et ca permet également d'éviter certains désagrément dans le pire des cas !
    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 !

  8. #8
    IDE
    IDE est déconnecté
    Membre régulier Avatar de IDE
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 238
    Points : 89
    Points
    89
    Par défaut Suite
    Merci pour ces explications, à bientôt.

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

Discussions similaires

  1. problème de saisie dans un menu en mode console
    Par kromartien dans le forum Débuter
    Réponses: 2
    Dernier message: 27/01/2008, 16h52
  2. Réponses: 3
    Dernier message: 20/04/2007, 16h37
  3. Réponses: 14
    Dernier message: 12/04/2007, 20h09
  4. Problème de raccoucis dans un menu
    Par taichitof_deutschlan dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 27/02/2007, 16h44
  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, 15h29

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