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 :

Valider avec certaines touches.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Janvier 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 68
    Par défaut Valider avec certaines touches.
    Bonjour,

    Je vous explique mon problème. Je code un programme dans lequel je fais un menu de différentes actions, que l'utilisateur sélectionne en appuyant sur 1 ou 2 ou... puis sur ENTER

    Je me demande si il y a possibilité de valider sans appuyer sur ENTER ? J'ai rechercher sur le web, et les différentes méthodes que j'ai pu trouver ne m’amène a rien..

    Je retrouve souvent le getchar() mais il faut lui aussi le valider avec la toucher ENTER...

    J'aimerais faire en sorte que l'utilisateur sorte du menu en pressant n'importe qu'elle autre touche, je flaire une piste, mais tjs la validation de la saisie à faire avec ENTER...

    Je ne sais même pas si c'est faisable en C..

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Avec ce que met à notre disposition le standard, je ne penses pas que cela soit possible.

    Et même si tu voulais jouer avec setvbuf, tu aurais peut-être un terminal qui bufferise indépendamment de ta volonté (mais peut-être est-ce paramétrable avec les termios).

    Enfin, imagine la prise de tête si tu devais gérer les retours chariot (backspace) etc....

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Peut être : int getch(void); // #include <conio.h>

    Description :
    Lit un caractère depuis le clavier, sans l'afficher à l'écran (et n'attend pas <Entrée> )

    ou

    int getche(void); // #include <conio.h>
    Description :
    Lit un caractère depuis le clavier, et l'affiche à l'écran (et n'attend pas <Entrée> )

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Janvier 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 68
    Par défaut
    Visual 2010 me dit ceci: absence de ';' avant 'type' a la ligne du getch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void main(){
    	printf("Presser n'imp");
    	int getch(void);
    	printf("TOTOTOTOTOTOTO");
    }
    Je ne voit pas ou j'ai pu en oublier une...

  5. #5
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Il ne faut pas mettre de void dans getch. "void" étant considéré comme un type (en fait l'absence de type), le compilateur attend un identificateur à la suite.

    Le "void" est éventuellement précisé dans le prototype de la fonction.

    EDIT : Comme précisé ci-dessous, il faut aussi enlever le "int".

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Janvier 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 68
    Par défaut
    Même si je l'enlève il me dit tjs la même erreur lors de la compilation.

    En revanche le khbit() fonctionne très bien dans l'utilisation que je veut en faire pour le "Frapper une touche pour continuer". En revanche si je veut exclure quelque touche de cette fonction, je mettrait bien dans condition en plus dans ma boucle (voir code ci dessous) mais je sais pas trop comment récupérer la valeur de ma touche avant qu'il valide...
    L'exemple ci dessous est donné pour exclure la touche 1.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void main(){
    	printf("Presser n'imp\n");
    	while(!kbhit() && getchar()!='1'){}
    	printf("TOTOTOTOTOTOTO");

  7. #7
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    dans le corps de main : c'est un prototype de fonction !, pas un appel de fonction.

    A+

  8. #8
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    salut !
    sous windows kbhit() dans conio.h.
    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
    // kbhit.c - from a microsoft example
     
    #include <conio.h>
     
    #include <stdio.h>
     
    int main( void )
     
    {
    int i = 0;
    clrscr();
    // Display message until key is pressed. 
    printf("bof");
    putchar(0x0D);
    putchar('|');
    putchar(0x0D);
    putchar('/');
    putchar(0x0D);
    putchar('-');
    putchar(0x0D);
    putchar('\\');
     
    while( !_kbhit() ){ 
    	putchar(0x0D);
    	printf("%d", i++);	
    }
     
    // Use _getch to throw key away.
     
    printf( "\nKey struck was '%c'\n", _getch() );
     
    }
    A+

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

Discussions similaires

  1. [WD12] Validation avec la touche OK (entrée)
    Par bruce207 dans le forum WinDev
    Réponses: 2
    Dernier message: 04/01/2009, 18h11
  2. Valider un formulaire avec la touche entree
    Par djedie dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/03/2007, 10h38
  3. Réponses: 4
    Dernier message: 30/08/2006, 17h15
  4. valider formulaire avec la touche 'entrer'
    Par mikees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 06/07/2006, 17h51
  5. Valider avec les touches du clavier
    Par pierrot67 dans le forum Bases de données
    Réponses: 8
    Dernier message: 17/02/2006, 08h22

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