Page 1 of 1

problème getkey...

Unread postPosted: 26 Sep 2012, 15:34
by Hedg-Hops
Bonjour, je vous expose mon problème:
je veux:
-entrer dans une boucle, et en resortir QUE si l'on tape [enter] ou [fleche droite]
- Dans la boucle, un test pour savoir si l'on tape [fleche gauche], si oui retour au label précédent
Voici le code: ( =! different de)

Code: Select all
0->key
getKey()->key

lbl aaa
ClrDraw
RecalPic image1  // affiche une image1 a l'écran
While key =!13 or key =!340  // je veux que tant que ni [enter] ni [fleche droite]
                                           // soit tapé, ça reste sur l'image1
  if key = 337:Goto debut      // si [fleche gauche] est tapé, ça sort de la
                                          //boucle et revient au début
EndWhile

lbl bbb
ClrDraw
RecalPic image2  // une image 2
While key =!13 or key =!340 // tant que ni [enter] ni [fleche droite]
                                          //  soit tapé, ça reste sur l'image2
  if key = 337:Goto aaa        // si [fleche gauche] est tapé, ça sort de la
                                          // boucle et revient a l'image 2
EndWhile



Voila... qu'est-ce qui ne va pas la dedant ??? ça reste bloqué au premier while......

Re: problème getkey...

Unread postPosted: 26 Sep 2012, 15:58
by Lepzulnag
SAlut,

il faut mettre le getkey()->key dans le while :

Code: Select all
0->key

lbl aaa
ClrDraw
RecalPic image1  // affiche une image1 a l'écran
While key =!13 or key =!340  // je veux que tant que ni [enter] ni [fleche droite]
                                           // soit tapé, ça reste sur l'image1
getKey()->key 
if key = 337:Goto debut      // si [fleche gauche] est tapé, ça sort de la
                                          //boucle et revient au début
EndWhile

lbl bbb
ClrDraw



La fonction getkey() renvoie la dernière touche pressée. Si aucune touche n'est pressée, elle renvoie 0. Quant tu arrives dans le while, à moins que l'utilisateur n'ait été extrêmement rapide, le getkey()->k a juste eu pour effet de mettre 0 dans k. Comme tu ne change pas la valeur de k dans ta boucle, elle va rester constamment à 0. Donc tu ne vas jamais sortir de ta boucle.

Re: problème getkey...

Unread postPosted: 26 Sep 2012, 16:08
by Lepzulnag
Il y a aussi une erreur dans la condition de ton while, une erreur de logique parfois assez casse-tête :

Code: Select all
While key =!13 or key =!340 


Tu conviendras que cela signifie "Tant que ( (ENTER n'est pas appuyé) ou (FLECHE GAUCHE n'est pas appuyé) )". Or cela est vrai pour toutes les touches, y compris pour ENTER ou FLECHE GAUCHE :

- si tu appuies sur ENTER, la condition (ENTER n'est pas appuyé) est fausse, mais (FLECHE GAUCHE n'est pas appuyé) reste vrai : tu n'as pas appuyé sur la flèche gauche. Donc tu ne sors pas du while, car tu as mis un OU. Pareil si tu appuies sur la flèche gauche, comme tu n'as pas appuyé sur ENTER, tu restes dans la boucle.

Il faut donc remplacer le OU par un ET, afin que cela donne :

"Tant que ( (ENTER n'est pas appuyé) ET (FLECHE GAUCHE n'est pas appuyé) )" <=> "Tant que (ni FLECHE GAUCHE ni ENTER ne sont appuyés)" <=> si l'un des deux est appuyé, on quitte.

Il y a plusieurs façons de voir les choses, choisis celle qui te convient le plus.

Re: problème getkey...

Unread postPosted: 26 Sep 2012, 17:16
by Hedg-Hops
Merci ! problème résolu ! :)
c'est vrai que de z80 à ti 89 c'est les conditions s"inverse" je ne comprenais pas... merci bien

Re: problème getkey...

Unread postPosted: 27 Sep 2012, 14:06
by Bisam
C'est la différence entre un
Code: Select all
Tant que (la condition est vraie)
  fais quelque chose
Fin du tant que

et un
Code: Select all
Répète :
  fais quelque chose
Jusqu'à ce que (la condition soit fausse)


La 2ème différence est que le "fais quelque chose" peut ne jamais être exécuté dans le premier cas si la condition est fausse dès le départ, alors que dans le 2ème cas, elle est toujours exécuté au moins une fois.

Sur les TI89 et les Nspire, les "Répète" n'existent pas, alors que sur z80, les 2 existent, tout comme en C.