
Programme interface PC > ROBOT
Débuté par bypbop, août 22 2012 02:06
26 réponses à ce sujet
#21
Posté 14 septembre 2012 - 10:54
oui, je pense qu'une variable pour mémoriser l'état de la boucle précédente est la meilleure solution.
#22
Posté 15 septembre 2012 - 11:56
Bonjour à tous
Voila j'arrive a quelque chose de correct maintenant.
quand je fais cela ca fonctionne :
mais je ne comprends pas une chose pourquoi quand je fais ceci cela ne tourne pas ???
c'est pourtant la mm chose non ?
Pour le false cela passe mais pas le true ...
Cordialement,
bypbop
Voila j'arrive a quelque chose de correct maintenant.
quand je fais cela ca fonctionne :
if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé { if(!tab[VK_UP]) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton { tab[VK_UP] = true; //on indique que le bouton est enfoncé printf("haut\r\n"); } } else // si le bouton est relaché { if(tab[VK_UP]) { tab[VK_UP] = false; //on indique que le bouton est relaché printf("haut relaché\r\n"); } }
mais je ne comprends pas une chose pourquoi quand je fais ceci cela ne tourne pas ???
if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé { if(tab[VK_UP]==false) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton { tab[VK_UP] = true; //on indique que le bouton est enfoncé printf("haut\r\n"); } } else // si le bouton est relaché { if(tab[VK_UP]==true) { tab[VK_UP] = false; //on indique que le bouton est relaché printf("haut relaché\r\n"); } }
c'est pourtant la mm chose non ?
Pour le false cela passe mais pas le true ...
Cordialement,
bypbop
#23
Posté 16 septembre 2012 - 12:42
Quel est le type de ta variable tab[VK_UP] ? Le premier cas peut fonctionner avec un entier, le deuxième non.
Tu devrais faire attention à ton indentation. Ca permet de mieux visualiser les choses et ça évite beaucoup de problèmes.
Tu devrais faire attention à ton indentation. Ca permet de mieux visualiser les choses et ça évite beaucoup de problèmes.
#24
Posté 16 septembre 2012 - 01:13
Bonsoir,
Oui comme c'est la première fois que je fais du C je découvre en mm temps ;-)
Cordialement,
bypbop
Oui comme c'est la première fois que je fais du C je découvre en mm temps ;-)
typedef enum{false, true} bool; bool tab[1] = {false}; do { if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé { if(!tab[VK_UP]) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton { tab[VK_UP] = true; //on indique que le bouton est enfoncé printf("haut\r\n"); } } else // si le bouton est relaché { if(tab[VK_UP]) { tab[VK_UP] = false; //on indique que le bouton est relaché printf("haut relaché\r\n"); } } }
Cordialement,
bypbop
#25
Posté 16 septembre 2012 - 03:38
Je travaille en général sous Unix donc il est possible que Windows offre une solution, mais en C, true et false n'existent pas (sauf à partir d'une norme qui n'est pas supportée par tous les compilateurs). Il faut en général les définir à l'aide d'un #define (avec TRUE 1 et FALSE 0 en général). Le type bool existe en C++.
Autant l'expression !TRUE définie comme je l'ai indiqué doit bien renvoyer 0, autant l'opérateur "!" sur un enum me laisse perplexe. Essaie d'inverser la déclaration de ton enum et affiche le résultat, juste pour le fun (voir http://c.developpez.com/cours/bernard-cassagne/node92.php pour plus de détail, même si le cours est un peu vieux).
Autant l'expression !TRUE définie comme je l'ai indiqué doit bien renvoyer 0, autant l'opérateur "!" sur un enum me laisse perplexe. Essaie d'inverser la déclaration de ton enum et affiche le résultat, juste pour le fun (voir http://c.developpez.com/cours/bernard-cassagne/node92.php pour plus de détail, même si le cours est un peu vieux).
#26
Posté 16 septembre 2012 - 10:14
Je travaille en général sous Unix donc il est possible que Windows offre une solution, mais en C, true et false n'existent pas (sauf à partir d'une norme qui n'est pas supportée par tous les compilateurs).
Sisi, le type bool existe bien en C avec la norme C99.
gcc supporte cette norme, il faut compiler avec le flag -std=c99 et include stdbool.h
avec stdbool, le boolean est un vrai type (et pas une énumération) donc !true fonctionne sans problème.
Et normalement les énumérations commencent bien à 0 et s'incrémente. Donc ton code devrait normalement marcher... (c'est comme ça que je faisais avant de découvrir c99 et stdbool, qui est quand même beaucoup plus clean !)
Mon site internet : http://ferdinandpiette.com/
#27
Posté 16 septembre 2012 - 10:38
Bonsoir c'etait juste pour savoir si mon raisonnement etait correct.
Pour mon niveau ca ne m'aidera pas plus.
Je passe à la suite ...
Cordialement,
bypbop
Pour mon niveau ca ne m'aidera pas plus.
typedef enum{false, true} bool; bool tab[1] = {false}; do { if (GetKeyState(VK_UP)& 0x80) //si le bouton est enfoncé { if(!tab[VK_UP]) //si le bouton était relaché avant, on en déduit qu'on a appuyé sur le bouton { tab[VK_UP] = true; //on indique que le bouton est enfoncé printf("haut\r\n"); } } else // si le bouton est relaché { if(tab[VK_UP]) { tab[VK_UP] = false; //on indique que le bouton est relaché printf("haut relaché\r\n"); } } }
Je passe à la suite ...
Cordialement,
bypbop
1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users