Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1553 connectés 

  FORUM HardWare.fr
  Programmation
  C

  problème d'inactivité suivie d'une saisie de texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème d'inactivité suivie d'une saisie de texte

n°1714698
bizu53
Posté le 08-04-2008 à 22:50:41  profilanswer
 

Bonjour,
 
Je suis confronté depuis la semaine dernière à un problème et je ne trouve pas comment m'en sortir.
En gros, mon programme est inactif pendant un moment, et après vient un gets().
Le problème, c'est que si l'utilisateur presse des touches pendant la période d'inactivité qui précède le gets(), on les retrouve "dedans". Si en plus par malheur on presse Entrer pendant l'inactivité... ça valide le gets() sans même que l'utilisateur n'ait pu écrire ce qu'il veut.
 
Au cas où ce que je dis n'est pas très clair, testez ce bout de code en tapant plein de caractères durant les 2secondes de pause :

Code :
  1. #include <stdio.h>
  2. #include <windows.h>
  3. int main() {
  4.   char s[100];
  5.   Sleep(2000);
  6.   gets(s);
  7. }


 
Existe-t-il une fonction pour "vider" ce qui a été éventuellement tapé avant le gets() ?
Ou, si ce n'est pas faisable, quelqu'un aurait une idée pour y remédier ? J'ai pas envie de recoder un gets() en écoutant les pressions de toutes les lettres... =P
 
Merci par avance

mood
Publicité
Posté le 08-04-2008 à 22:50:41  profilanswer
 

n°1715109
bizu53
Posté le 09-04-2008 à 16:06:57  profilanswer
 

J'avais vu la fonction kbhit() mais je n'avais pas testé (pensant qu'elle "voyait" les pressions de touches, et non si une touche a été pressée).
Cette petite nuance m'a donc permis de trouver comment "vider" tous les caractères non voulus.

 

Au cas où ça pourrait servir à quelqu'un, il suffit d'ajouter juste avant le gets() ces 2 lignes qui permettent de "prendre" un caractère tant qu'il y a un caractère qui peut l'être, avant le gets()

 
Code :
  1. while(kbhit())
  2.   getch();


Message édité par bizu53 le 09-04-2008 à 16:09:31
n°1715621
ptitchep
Posté le 10-04-2008 à 14:07:50  profilanswer
 

Salut
ces fonctions ne sont pas portables. Si quelqu'un connait une solution portable ça pourrait être intéressant. Merci quand même d'avoir posté ta solution, ça peut servir à d'autres.
autre chose:
BOGUES
       N'utilisez jamais gets(). Comme il est impossible de savoir à l'avance combien de caractères  seront  lus  par
       gets(),  et  comme celui-ci écrira tous les caractères lus, même s'ils débordent du tampon, cette fonction est
       extrèmement dangereuse à utiliser. On a déjà utilisé ce dysfonctionnement pour créer des  trous  de  sécurité.
       UTILISEZ TOUJOURS fgets() À LA PLACE DE gets().


---------------
deluser --remove-home ptitchep

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  problème d'inactivité suivie d'une saisie de texte

 

Sujets relatifs
Problème de publication d'Eclipse vers JBossdéclaration d'un tableau d'objet probléme
Problème initialisation parserJDOM: problème de namespace
[EXCEL] Problème RECHERCHEV dynamiqueProblème template template [RESOLU]
probleme de driver jdbclire un fichier texte utilisé par un autre processus
Enregistrement d'une donnée saisie par un visiteurProblème d'edition de lien
Plus de sujets relatifs à : problème d'inactivité suivie d'une saisie de texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR