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

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

Marsh Posté le 08-04-2008 à 22:50:41    

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

Reply

Marsh Posté le 08-04-2008 à 22:50:41   

Reply

Marsh Posté le 09-04-2008 à 16:06:57    

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
Reply

Marsh Posté le 10-04-2008 à 14:07:50    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed