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 :

comment se passer de la touche entrer pour valider (scanf)


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2013
    Messages : 35
    Points : 5
    Points
    5
    Par défaut comment se passer de la touche entrer pour valider (scanf)
    bonjour
    voila je fabrique un jeu ou on peut se deplacer avec les touche :"a,z,e,s" et j'ai utilisé scanf , mais le probleme c'est que je dois a chaque fois valider par entrer mes decisions de deplacement et a la fin c'est lourd et lent.
    je me demandais donc si y'avait un moyen a mon programme que des qu'on apuie sur une touche ca valide sans avoir a appuyer sur entrer? j'espere que j'ai été assez clair

    merci d'avance.

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Tu devrais t'orienter soit vers la détection avec une lib "complète" d'entrée/sortie (par exemple la SDL ou SFML qui font à la fois du graphique, du son et de la lecture de touche).

    Ou alors si tu tapes dans une console, il te faut utiliser le mode canonique du terminal !
    Intéresse-toi aux termcaps, terminfo, et termios.

  3. #3
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 855
    Points : 2 177
    Points
    2 177
    Par défaut
    Je rajoute aux termcaps et tout le tralala lie a la console qu'a deja dit Metalman que la lib ncurses est tres bien pour ca.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Points : 80
    Points
    80
    Par défaut Salut
    Les deux propositions ci-dessus marchent .
    Mais n est t il pas possible de bidouiller avec les Regex et un getchar en lieu et place de scanf?

    Si valider signifie ici executer une action .

    Regex [a,z,e,s]

    si le caractere recupere correspond au Regex (match) , executer l action approprié.

    Bon on peut surement encore faire plus simple.

  5. #5
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 528
    Points
    3 528
    Par défaut
    Les ncurses... j'oublie TOUJOURS les ncurses !... ça c'est parce que ma promo devait utiliser les termcaps/terminfo en 42sh, et on était interdit de ncurses !
    Merci M.Imperio !

    Et j'oubliais : avec toutes ces méthodes, tu devras "évidemment" faire des read de taille 1. (man 2 read)

    @fab : mais getchar n'est pas bloquant ?
    Il me semble que si... mais je n'ai pas vérifié.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Il n'existe rien en C standard qui permette de saisir une entrée sans passer par des lignes complètes.

    Tout est une question d'extensions de la plate-forme et de bibliothèques externes.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 667
    Points : 1 697
    Points
    1 697
    Par défaut
    Hello,

    Bon, d'accord, ce n'est sans doute pas portable, mais pourquoi ne pas associer un getch() à un kbhit() ?

  8. #8
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 855
    Points : 2 177
    Points
    2 177
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Les ncurses... j'oublie TOUJOURS les ncurses !... ça c'est parce que ma promo devait utiliser les termcaps/terminfo en 42sh, et on était interdit de ncurses !
    Merci M.Imperio !

    Et j'oubliais : avec toutes ces méthodes, tu devras "évidemment" faire des read de taille 1. (man 2 read)
    De rien M. Metalman ! Dans ma promo aussi la ncurses etait interdite... Pauvre de nous !
    Par contre si on utilise les termcaps il ne faut surtout pas faire des read de taille 1 mais de taille 5 (si on est en mode canonique, cela va de soi). La raison est simple, si l'utilisateur appuie sur une touche qui n'est pas dans le man ascii (et il y en a un paquet), la "valeur" de la touche va s'etendre sur plusieurs touches et donc, si on fait un read de 1, ca va renvoyer des valeurs erronee. Par exemple si on appuie sur la fleche de droite ca donnera un truc dans ce genre :

    {10, 97, 65}.

    Citation Envoyé par Metalman Voir le message
    @fab : mais getchar n'est pas bloquant ?
    Il me semble que si... mais je n'ai pas vérifié.
    getchar est bloquant.

    Citation Envoyé par Metalman Voir le message
    Il n'existe rien en C standard qui permette de saisir une entrée sans passer par des lignes complètes.

    Tout est une question d'extensions de la plate-forme et de bibliothèques externes.
    Passer le terminal en mode canonique permet justement d'outrepasser ce fonctionnement il me semble, sauf si le fonctionnement interne ne change pas mais dans tous les cas le developpeur n'a pas a se soucier de ca.

    EDIT: quoique, je ne sais pas si on peut passer un terminal windows en mode canonique sans passer par une lib externe...

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2013
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    merci pour vos reponses ,
    j'ai pris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <conio.h>
    char move = getch();
    et ca marche tres bien , mais j'ai vu des choses qui me font un peu peur , ca bloque?? je n'ai pas compris , pouvez vous m'eclairer pourquoi ca peut bloquer et quoi?

  11. #11
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 855
    Points : 2 177
    Points
    2 177
    Par défaut
    Ce qu'on entend par "ca bloque" c'est que la fonction attend l'appui de la touche retour a la ligne pour continuer son execution. C'est ce qu'on appelle le mode canonique.

Discussions similaires

  1. [CR XI] Comment se passer d'un sous report pour gagner du temps de traitement ?
    Par Adricube dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 18/11/2014, 12h06
  2. Réponses: 2
    Dernier message: 07/05/2010, 17h42
  3. Réponses: 1
    Dernier message: 23/04/2009, 12h35
  4. Touche Entrée pour valider
    Par sly60 dans le forum Débuter
    Réponses: 2
    Dernier message: 30/01/2008, 16h17
  5. [WebForms]Comment utiliser la touche entrée pour valider un formulaire ?
    Par yonialhadeff dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 10/05/2006, 12h29

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