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 :

Probleme avec doskey et buffer...


Sujet :

C

Vue hybride

shaiton Probleme avec doskey et... 08/01/2006, 10h55
Emmanuel Delahaye Re: Probleme avec doskey et... 08/01/2006, 11h19
shaiton houla, alors en fait,... 08/01/2006, 12h08
Emmanuel Delahaye Il faut lire les caractères... 08/01/2006, 14h49
shaiton ok, mais ca marche comment? ... 08/01/2006, 15h13
Emmanuel Delahaye Comme je l'ai expliqué. ... 08/01/2006, 15h22
shaiton ok, je comprend mieux avec le... 08/01/2006, 15h28
Emmanuel Delahaye Oui, question de maintenance... 08/01/2006, 15h55
shaiton ok, merci bien pour ce petit... 08/01/2006, 15h59
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 67
    Par défaut Probleme avec doskey et buffer...
    Alors en fait, je suis debutant (j'aprend depuis septembre le C)
    et j'ai fais un petit jeu (simon, en mode console).

    Il a une faille : on peut se servir de l'historique (doskey) pour retrouver se qu'oin a tapé avant.
    J'avais une solution: executer dans la fenetre
    doskey /LISTSIZE=1
    ce qui permet de memoriser qu'une seule commande dans l'historique.
    j'utilise devC++ donc j'ai voulu faire
    system("doskey /LISTSIZE=1");
    mais pas moyen, ca marche pas.

    Si quelqu'un a une idée..


    deuxieme probleme:
    pour mes menu j'utilise getch().
    Quand j'ai un menu apres une musique ou quelquechose qui prend du temps,
    getch() prend la touche qui a ete tapée pednant la musique.
    donc j'aimerais pouvoir vider le tempon juste avant mon menu.
    mais ca ne marche pas avec fflush(stdin);
    remarque : les caracteres entree avec getch() ne sont pas memorisé dans l'historique, je suppose donc que se n'est pas le meme tempon.....

    je confond tout?
    eclairez moi SVP, je suis debutant

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Probleme avec doskey et buffer...
    Citation Envoyé par shaiton
    Alors en fait, je suis debutant (j'aprend depuis septembre le C)
    et j'ai fais un petit jeu (simon, en mode console).
    'débutant' et 'jeux' sont des mots qui vont rarement ensemble...
    Il a une faille : on peut se servir de l'historique (doskey) pour retrouver se qu'on a tapé avant.
    Sous MS-DOS, oui, peut être... Si ça gène, il suffit de ne pas installer doskey. Voir l'autoexec.bat...
    deuxieme probleme:
    pour mes menu j'utilise getch().
    Ce qui est une façon radicale (mais non portable) de régler le problème de doskey...
    Quand j'ai un menu apres une musique ou quelquechose qui prend du temps,
    getch() prend la touche qui a été tapée pendant la musique.
    Normal, c'est indépendant (le traitement est fait sous interruption).
    donc j'aimerais pouvoir vider le tempon juste avant mon menu.
    mais ca ne marche pas avec fflush(stdin);
    Evidemment, et pour 2 raisons.
    • fflush() n'est définit que pour les flux sortants
    • getch() n'a rien à voir avec stdin. C'est une fonction de gestion directe du clavier.

    remarque : les caracteres entree avec getch() ne sont pas memorisé dans l'historique, je suppose donc que se n'est pas le meme tempon.....
    'tampon'. Oui, absolument. Il est d'alleurs fortement recommandé de faire des choix clairs et définitifs.
    • Soit tu utilises les entrées standard (stdin) et les fonctions de <stdio.h> qui vont bien (fgetc(), fgets() etc.)
    • soit tu utilises la gestion directe du clavier avec les fonctions de <conio.h> comme kbhit(), getch() etc.

    Mélanger les deux est extrèmement risqué.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 67
    Par défaut
    houla,

    alors en fait, j'utilise stdio.h,
    pour entrer des chaines de caractere, j'utilise scanf() (pratique, car besoin du retour chariot)
    et getch() pour mes menu.

    Ca ne vas pas alors? enfin, c'est pas propre?



    il y a une solution alors pour ne pas prendre la saisie clavier trop tot? (pour mon getch)

    Merci pour cette reponse (la je suis sencé bosser pour mes exams, mais j'arrive pas a me defaire du C :p ... )

    Citation Envoyé par Emmanuel Delahaye
    'débutant' et 'jeux' sont des mots qui vont rarement ensemble...
    Merci

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par shaiton
    il y a une solution alors pour ne pas prendre la saisie clavier trop tot? (pour mon getch)
    Il faut lire les caractères indésirables avant la saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (kbhit())
    {
       (void) getch();
    }
    ensuite, tu fais la saisie :

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 67
    Par défaut
    ok, mais ca marche comment?

    parce qu'en fait, j'ai une suite d'instruction pour faire de la "musique"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=1;1<10;i++)
                  beep(100*i, 20);
    printf("entrer votre choix\n");         /* mon menu */
    c = getch();

    donc voila, je ne le fait pas dans un processus fils (enfin, j'ai qu'unb seul processus)
    donc je voudrait juste avant mon getch prendre le caractere...
    je doit donc mettre
    kbhit() juste avant mon printf()?

    (parce que je veux qu'en fait, si on appui sur une touche, ne pas en tenir compte. mais si on appuis pas, continuer)

    je connais pas kbhit()....

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par shaiton
    ok, mais ca marche comment?
    Comme je l'ai expliqué.
    parce qu'en fait, j'ai une suite d'instruction pour faire de la "musique"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=1;1<10;i++)
                  beep(100*i, 20);
    printf("entrer votre choix\n");         /* mon menu */
    c = getch();
    donc je voudrait juste avant mon getch prendre le caractere...
    je doit donc mettre
    kbhit() juste avant mon printf()?

    (parce que je veux qu'en fait, si on appui sur une touche, ne pas en tenir compte. mais si on appuis pas, continuer)

    je connais pas kbhit()....
    kbhit() permet de tester le clavier. Ca permet de ne le lire que si il y a quelque chose à lire.
    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
     
       for(i=1;1<10;i++)
       {
          beep(100*i, 20);
       }
     
       printf("entrer votre choix\n");         /* mon menu */
     
       /* nettoyage */
       while (kbhit())
       {
          (void) getch();
       }
     
       /* saisie */
       c = getch();
    Si tu veux faire une lecture non blocante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       /* saisie */
       if (kbhit ())
       {
          c = getch();
       }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 67
    Par défaut
    ok, je comprend mieux avec le if,
    juste comme ca, il vaut mieux mettre les acolade pour les boucles avec une seule instruction? (plus lisible je suppose)

    je dis ca parce que tu les mets...

    merci, je modifierais ma source ce soir!

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par shaiton
    juste comme ca, il vaut mieux mettre les acolade pour les boucles avec une seule instruction? (plus lisible je suppose)
    Oui, question de maintenance et de lisibilité. Il arrive fréquemment que le code grossisse (ajout d'un ligne dans un if ou un else...) autant être prêt.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 67
    Par défaut
    ok, merci bien pour ce petit cours :p

    je connaissais pas ce forum, mais je reviendrai !

Discussions similaires

  1. probleme avec response.buffer
    Par olaxius dans le forum ASP
    Réponses: 3
    Dernier message: 07/07/2006, 11h24
  2. [VB.NET] Probleme avec un buffer
    Par Aspic dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/12/2005, 16h17
  3. probleme avec le stencil buffer
    Par conrad dans le forum DirectX
    Réponses: 7
    Dernier message: 05/08/2005, 21h48
  4. Probleme avec le vertex buffer
    Par nicoo dans le forum DirectX
    Réponses: 12
    Dernier message: 19/10/2004, 21h45

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