Le getch() ne fonctionne pas comme je veux [Résolu]

Signaler
Messages postés
153
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 octobre 2006
-
Messages postés
153
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 octobre 2006
-
Bonjour à tous,

j'ai un ch'tit programme avec une fonction de saisie. J'utilise la fonction getch() pour récupérer chaque caractère que l'on tape.
J'utilise les flêches également, les codes ASCII sont :
#define UP 72
#define LEFT 75
#define RIGHT 77
#define DOWN 80
Seulement, quand j'appuie sur une des flêches, il m'affiche -32 suivi du code ASCII de la flêche et pas seulement le code ASCII, par ex. pour la flêche gauche -3275 au lieu de 75 tout simplement.

Voici la boucle dans laquelle je fais mon switch :
do
{
chaine = new char[taille];
if(tmp!=NULL) {
for(int i = 0;i < taille; i++) {
chaine[i] = tmp[i];
}
}
car = getch();
cout << (int)car;
switch(car) {
case ENTER :
chaine[taille-1] = '\0';
return chaine;
case LEFT :
if( x > 0 ) {
x--;
taille--;
Position.X = x;
Position.Y = y;
SetConsoleCursorPosition(hOut, Position);
}
break;
case RIGHT :
if( x < (strlen(chaine)+1) ) {
x++;
taille++;
Position.X = x;
Position.Y = y;
SetConsoleCursorPosition(hOut, Position);
}
break;
case UP :
break;
case DOWN :
break;
case DEL :
cout << "!DEL!" <<endl;
break;
case BCKSPC:
if(taille>1) {
taille--;
tmp = new char[taille];
for( int i = 0;i<taille;i++) {
tmp[i] = chaine[i];
}
}
else if (taille == 1) {
taille = 1;
chaine = NULL;
tmp = NULL;
}
x--;
Position.X = x;
Position.Y = y;
SetConsoleCursorPosition(hOut, Position);
cout << " ";
SetConsoleCursorPosition(hOut, Position);
break;
default :
chaine[taille-1] = car;
//cout << chaine[taille-1];

tmp = new char[taille];
tmp = chaine;
taille++;
x++;
break;
}


fflush(stdin);
}while(1);

J'avais déjà fais un prgm dans le même genre avec Dev-cpp 4 et ça fonctionnait correctement.
Là j'utilise wxDev-cpp 4.9.9.2 après MAJ.
Quelqu'un serait pourquoi il me saisie deux caractères et non un seul

Merci d'avance
Kobee12

2 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,

Les flèches n'ont pas de codes ASCII (Pareil pour F1-F12, PAGE DOWN,
PAGE UP, HOME, END, INSERT et DEL). Les codes ASCII 72, 75, 77 et 80
correspondent respectivement aux lettres majuscules H, K, M, et
P. Si getch() te retourne un code différent je crois que c'est
une bonne chose car cela te permet de différencier les flèches des
lettres citées. Avec d'autres versions de getch(), comme celle de
Visual C 6, on est obligé d'appeler getch() de nouveau quand le code
retourné est 0 ou 224 pour récupérer le code de la touche (non ASCII)
comme les flèches ou les touches de fonctions etc... comme dans ce code
source:

http://www.cppfrance.com/code.aspx?id=26179

Avec ta version de getch(), tu n'as pas besoin de tout cela puisque le
code retouné te permet d'être sûr qu'il s'agit bien d'une flèche et non
d'une lettre. Il te suffit donc de l'exploiter dans ton programme.
Messages postés
153
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 octobre 2006
1
Ok merci!!!

J'ai adapté mon prog pour que ça fonctionne.
Merci de ta réponse