Le getch() ne fonctionne pas comme je veux

Résolu
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 - 24 mars 2005 à 15:05
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 - 24 mars 2005 à 17:38
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

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
24 mars 2005 à 15:54
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.
3
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
24 mars 2005 à 17:38
Ok merci!!!

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