MessageBox - Const Char - Concversion ASCII

guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009 - 13 sept. 2003 à 17:18
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009 - 13 sept. 2003 à 19:04
Bonjour,

J'ai encore besoin de vos lumieres (et ca sera pas la derniére)

1- j'utilise une boucle pour récupérer les actions clavier:
if(GetAsyncKeyState(y)==-32768){...} (cool ca marche ;))

2- "y" qui est en ascii je le converti en lettre:
z=(char)y; (je vous cache pas que la je pense faire une connerie)

3- je fais apparaitre MessageBox:
MessageBox(0, z, "lettre", 0); (et la bien sure c un cataclysme y'a rien qui fonctionne).

Pourriez vous m'aider svp .... merci.

18 réponses

Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 17:24
Quand tu di "y est en ascii" tu pense au code ascii (nb de la lettre) de la lettre y ?

Si oui, y est un int et je croi que char x=y; devrait marcher
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
13 sept. 2003 à 17:31
Bonjour,

- oui je pense a ascii (le nb de la lettre) et "y" est une variable
-oui y est un int
-Et non a mon grand desespoire char x=y; ne fonctionne pas.
Le message d'erreur est le suivant:
"passing `int' to argument 2 of `MessageBoxA(HWND__ *, const CHAR *, const CHAR *, unsigned int)' lacks a cast"

Voila c tout (j'utilise DevC++)

Merci
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 17:31
-------------------------------
Réponse au message :
-------------------------------

> Quand tu di "y est en ascii" tu pense au code ascii (nb de la lettre) de la lettre y ?
>
> Si oui, y est un int et je croi que char x=y; devrait marcher
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Bonjour,
> >
> > J'ai encore besoin de vos lumieres (et ca sera pas la derniére)
> >
> > 1- j'utilise une boucle pour récupérer les actions clavier:
> > if(GetAsyncKeyState(y)==-32768){...} (cool ca marche ;))
> >
> > 2- "y" qui est en ascii je le converti en lettre:
> > z=(char)y; (je vous cache pas que la je pense faire une connerie)
> >
> > 3- je fais apparaitre MessageBox:
> > MessageBox(0, z, "lettre", 0); (et la bien sure c un cataclysme y'a rien qui fonctionne).
> >
> > Pourriez vous m'aider svp .... merci.
>
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 17:39
Effectivement, ya plusieur pb, mais de tte facon, je crois que ca ne marchera pas, ce n'est pas le code ascii utilisé ici, mais les VirtualKeyCode, c différen et les code sont pas les même ! Donc tu n'aura pas la bonne lettre si tu par du principe qu'il s'agit de code ascii

Je regarde ca et si j'ai du nouveau je te prévien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 sept. 2003 à 17:39
Salut,
Le second param de MessageBox c'est une chaine de caractere terminée par 0.
Je vois la chaine, ou est le 0 final ?
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
13 sept. 2003 à 17:46
Bonjour,
- Merci Anacr0x porta recherche
- aardman, en fait je peux pas répondre a ta question car je sais pas a quoi sert ce 0.

Excusé mon ignorance mais je suis un débutant de chez débutant
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 sept. 2003 à 17:48
Salut,
Si la variable y contient le numero de la touche, y'a pas de probleme.
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 17:53
Bon ben ds ce cas essaye avec ca :

char x=y;
char z[2];
sprintf(z, "%c", x);
MessageBox(NULL, z, "lettre", MB_OK);
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 sept. 2003 à 17:53
Salut,
Ben comment tu veux que MessageBox sache combien de caractere elle doit ecrire ? elle est pas medium :)
En fait en C les chaines de caracteres sont terminées par le caractere NULL, le zéro final.
MessageBox copie donc toute ta chaine jusqu'au caractere 0.
Dans ton exemple, pas de caractere 0, donc forcement plantage.
Voila comment je ferais ce que tu veux faire:

if(GetAsyncKeyState(i))
{
char szText[2];
szText[0] = (char)i;
szText[1] = 0;
MessageBox(0, szText, 0, 0);
}
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 17:55
Ou encor avec ca (plus rapide)

char z[1];
z[0]=y; z[1]='\0';
MessageBox(NULL, z, "lettre", MB_OK);
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 sept. 2003 à 17:57
Salut,
En effet sans le sprintf(...), c'est plus joli.
0
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
13 sept. 2003 à 18:05
Bijourr!
Anacr0x: char z[1] réserve de la mémoire pour 1 char (soit 1 octet) donc z[1] n'existe pas! => erreur!

Ensuite le compilo donne la syntaxe de MessageBox avec l'arg pour le txt de la MsgBox : char* donc le problème venait du fait qu'un char n'est pas un char*
char est un caractère
char* est une chaîne de caractères
La méthode de Anacr0x (dsl si j'écris mal son nom) marche donc en changeant char z[1] par z[2]

A++

Chouchou182
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 18:10
La je croi que tu as tord, char z[1] donne 2 caractère, z[0] et z[1] mais la jsui plu tt a fait sur, tu ma donné un gros doute

de plus char est un caractère, char[] un tableau de caractère et char* est un pointeur sur caractère (pas forcément une chaine)

Et pour finir, le MessageBox accepte tte ces formes de caractère
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 18:20
oups, en définitive, tu doit avoir raison
G parler tro vite, dsl Chouchou182
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
13 sept. 2003 à 18:28
Merci pour votre aide je pense que je suis presque a la fin.
Cependant je me permet de mettre un bout de mon code pour correction (car ca marche po):
Je voudrais faire une boucle qui detecte et affiche les touches sur lesquelles on appui.
et quand on appuis que ESPACE tout s'arrete.

int x,y;
while(GetAsyncKeyState(32)!=-32768)
{

for(y=0;y=128;y++)
{
if(GetAsyncKeyState(y)==-32768)
{
char x=y;
char z[2];
sprintf(z, "%c", x);
MessageBox(NULL, z, "lettre", MB_OK);
Sleep(5);
}
Sleep(5);
}

Sleep(5);
}

Mon code doit pas etre tres optimisé mais je débute.

Encore merci pour votre aide ;)
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
13 sept. 2003 à 18:35
for(y=0;y<128;y++)
ca devré allé un mieu, ensuite, je ne connais pas GetAsyncKeyState et otr alor...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
13 sept. 2003 à 18:42
Salut,

int x,y;
while(!GetAsyncKeyState(32))
{
for(y=33;y<128;y++)
{
if(GetAsyncKeyState(y))
{
char z[2];
z[0] = (char)y;
z[1] = 0;
MessageBox(0, z, "lettre", 0);
Sleep(5);
}
Sleep(5);
}
Sleep(5);
}

- quand tu utilise GetAsyncKeyState, pas besoin de mettre = 32768. GetAsyncKeyState retourne un truc different de 0 si la touche est enfoncée, sinon 0.

- Tu ne peux pas commencer a scanner les touches de 0 a 128, les touches "visibles" sont >32.
0
guitoulefoux Messages postés 152 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 6 janvier 2009
13 sept. 2003 à 19:04
Ca marche super merci pour tout
0
Rejoignez-nous