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 :

[debutant]Limiter le temps de saisi


Sujet :

C

  1. #1
    Membre �m�rite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par d�faut [debutant]Limiter le temps de saisi
    Bonjour.

    Je cherche une fonction (ou algo) qui me permette, si possible, de limiter le temps de saisi . En fait, c'est un jeu avec diff�rents niveaux que je suis en train de faire, et le niveau maximum contient une difficult� : on a pas tout le temps que l'on veut pour taper la r�ponse .
    Comment faire ?
    Par exemple, on a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    scanf("%d" , &qch) ;
    /* je veux limiter ici le temps ... donc par exemple mettre une fonction qui demarre a partir d'ici et dans 10 secondes, si rien nest rentré par la personne, elle se declenche et met fin au prompt de saisie */
    C'est possible ca? J'ai regard� sleep() mais c'est pas ca...

    Merci.

    Nas'

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Par d�faut
    Le probl�me est qu'une fois scanf() appel�e, elle attendra la valeur ind�finiment et on ne pourra pas la rappeler. Il faut donc trouver un moyen de voir si l'usager a tap� quelque chose avant d'appeler scanf(). Voici un exemple:
    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
    33
    #include <conio.h>
    #include <stdio.h>
    #include <time.h>
     
     
    int main()
     
    {
    int     qch;
    time_t  temps_initial;
    int     ok=0;
     
     
    temps_initial = time(0);
     
    printf("Entrez un nombre: ");
     
    while ((time(0) - temps_initial) < 10)  {
       if (kbhit()) {
         ok = 1;
         break;
       }
    }
     
    if (!ok) printf("Trop rard !");
    else  {
      scanf("%d" , &qch);
      printf("Votre valeur: %d", qch);
    }
     
    return 0;
     
    }
    �videmment, cet exemple n'est pas compatible ANSI C parce qu'il utilise des fonctions DOS, mais il est probablement adaptable pour un autre syst�me.

    En fait, on attend que l'usager ait tap� une touche avant d'appeler scanf(). S'il prend plus de 10 secondes, il est trop tard. Cependant, rien ne l'emp�che de taper quelque chose et d'attendre avant de taper le reste.

    Voici un autre exemple qui attend que l'usager ait press� la touche ENTR�E avant de conclure que l'intention est bonne:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <conio.h>
    #include <stdio.h>
    #include <time.h>
     
     
    int main()
     
    {
    char        buffer[256];
    int         index=0;
    char        c;
    int         qch;
    time_t      temps_initial;
    int         ok=0;
     
     
    temps_initial = time(0);
     
    printf("Entrez un nombre: ");
     
    while ((time(0) - temps_initial) < 10)  {
       if (kbhit()) {
         c = getche();
         if (c == 13)  {
           buffer[index] = 0;
           ok = 1;
           break;
         }
         buffer[index++] = c;
       }
    }
     
    if (!ok) printf("Trop rard !");
    else  {
      sscanf(buffer, "%d" , &qch);
      printf("Votre valeur: %d", qch);
    }
     
    return 0;
     
    }
    axile

  3. #3
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2002
    Messages
    104
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 104
    Par d�faut
    bonjour,

    j'ai peut etre une solution plus standard : la fonction "select"

    elle permet d'attendre des chagements d'�tats de descripteurs de fichiers,
    et elle prend �galement un timeout en paramettre ... bref je pense que cela r�pond parfaitement a ton probl�me.

    pour plus de d�tails : man select

  4. #4
    Bob
    Bob est d�connect�
    Membre exp�riment�
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par d�faut
    Effectovement, il n'existe pas de manieres directes pour resoudre ce pb. Tu vas devoir le contourner avec des methodes comme axile a montre. Par ex, tu peux faire une fonction qui affiche les caracteres entres tout en verifiant si le tps n'est pas ecoule...

  5. #5
    Membre �m�rite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par d�faut
    Citation Envoy� par cboun94
    pour plus de d�tails : man select
    J'ai oubli� de pr�ciser que je suis sous Windows 98 .
    Mais merci quand meme ... je vais faire une recherche sur ce select pour voir si c'est pas trop compliqu� car, comme dit ds le titre, je suis d�butant. Par contre, le script de Axile, malgr� mon niveau, je le comprend et je pensais faire qch comme cela, mais je ne savais pas comment ca se faisait...
    Pour la fonction que tu proposes, Bob, c'est pas la meme que celle de Axile ? Le 2e code semble mieux me convenir (attente de validation avec la touche entrer).

    Un ptit truc : j'aurais voulu savoir si vous avez une doc qui vous sert de reference ? Car ya bcp de doc sur le C mais avez-vous une doc qui explique tout (et pas que les bases avec les boucles...) car par exemple,
    la fonction kbhit() (je la connais grace a ce forum ) je l'ai pas vu dans des tutos ... .

    Enfin, merci, qd j'aurais le temps, je testerai le code et je reviendrais si il y a un prob.

    En tt cas, merci

    Nas'

  6. #6
    Bob
    Bob est d�connect�
    Membre exp�riment�
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par d�faut
    Pour la doc de reference, j'utilise l'aide MSDN fournie avec VC.
    Y a vraiment bcp de choses, y compris du C

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. limit et temps d'execution avec oracle et PHP
    Par dor_boucle dans le forum Oracle
    R�ponses: 20
    Dernier message: 10/12/2005, 14h31
  2. limiter � 8 caracteres la saisie dans un cedit
    Par firejocker dans le forum MFC
    R�ponses: 4
    Dernier message: 07/12/2005, 15h41
  3. limitation en temps de msn
    Par ricardo dans le forum Messagerie instantan�e
    R�ponses: 4
    Dernier message: 19/09/2005, 10h54
  4. [Info][Debutant(e)]affichage temps reel
    Par nine dans le forum D�veloppement Web en Java
    R�ponses: 15
    Dernier message: 26/11/2004, 17h03
  5. [debutant] problemes de temps
    Par dervish dans le forum D�buter
    R�ponses: 11
    Dernier message: 04/08/2004, 10h28

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