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 éprouvé
    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
    Points : 1 166
    Points
    1 166
    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 régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 73
    Points
    73
    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 habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Points : 128
    Points
    128
    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 averti
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 378
    Points
    378
    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 éprouvé
    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
    Points : 1 166
    Points
    1 166
    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 averti
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 378
    Points
    378
    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, 15h31
  2. limiter à 8 caracteres la saisie dans un cedit
    Par firejocker dans le forum MFC
    Réponses: 4
    Dernier message: 07/12/2005, 16h41
  3. limitation en temps de msn
    Par ricardo dans le forum Messagerie instantanée
    Réponses: 4
    Dernier message: 19/09/2005, 11h54
  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, 18h03
  5. [debutant] problemes de temps
    Par dervish dans le forum Débuter
    Réponses: 11
    Dernier message: 04/08/2004, 11h28

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