Récupérer un caractére

Récupérer un caractére - C - Programmation

Marsh Posté le 01-11-2006 à 16:06:44    

Bonjour à tous,
voilà j'aimerais savoir comment faire pour récupérer un caractére en C. Et cela sans que l'utilisateur ne tape sur ENTREE.
 
Je sais qu'avec getch() c'est possible mais le probléme est que getch retourne un entier  :non: , alors que j'aimerais justement qu'il me retourne un char  :)  
 
Merci d'avance pour votre réponse.
 

Reply

Marsh Posté le 01-11-2006 à 16:06:44   

Reply

Marsh Posté le 01-11-2006 à 16:10:43    

Le type naturel pour un caractère en C, c'est int. Ca ne devrait pas poser de problème.
 
getch() répond à ton besoin mais n'est pas portable, en standard il n'y a rien qui puisse faire ça sinon.

Message cité 1 fois
Message édité par Elmoricq le 01-11-2006 à 16:10:54
Reply

Marsh Posté le 01-11-2006 à 17:42:08    

Elmoricq a écrit :

Le type naturel pour un caractère en C, c'est int.


 
+1
c'est contre-intuitif mais c'est comme ça : 'A' c'est un int
en C++ ça a été corrigé, les caractères sont des char.

Reply

Marsh Posté le 01-11-2006 à 19:02:02    

merci pour vos réponses. Si getch retourne un int, comment faire pour afficher la lettre que l'utilisateur viens de taper. par exemple :
 
int c;
c=getch();
printf("%d",c);
 
comment faire pour que printf affiche le caractére tapé ? :)
merci :)

Reply

Marsh Posté le 01-11-2006 à 19:03:25    

int c;  
c=getch();  
printf("%c",(char)c);  
 
même si sans le cast ça marche qd même, c'est + explicite de le mettre

Reply

Marsh Posté le 01-11-2006 à 19:15:23    

jesus_christ a écrit :

Code :
  1. int c;
  2. c=getch();
  3. printf("%c",(char)c);


 
même si sans le cast ça marche qd même, c'est + explicite de le mettre


Non seulement c'est inutile, mais c'est une c*nnerie, car "%c" attend un int. Heureusement, avec une fonction variadic, tout char est promu en int...

Code :
  1. int c;
  2.    c = getch ();
  3.    putch (c);

:)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-11-2006 à 20:17:04    

%c attend un int mais ayant une valeur dans l'intervalle de char. Et les promotions se font toujours vers la taille standard de l'architecture au minimum, généralement 32-bits. Tous les %-machin attendent un élément sur la pile, toujours de la même taille (sauf éventuellement les double ou les struct).
 
char c;
f(c);
c'est bien 32 bits qui seront empilés pour l'appel, même sans variadic. Les bits de poids forts seront juste ignorés.

Reply

Marsh Posté le 01-11-2006 à 20:38:41    

jesus_christ a écrit :

Et les promotions se font toujours vers la taille standard de l'architecture au minimum, généralement 32-bits.


Absolument pas.

Reply

Marsh Posté le 01-11-2006 à 20:59:00    

l'empilement des paramètres se font par multiples de taille d'un GPR. Emplier un char (1 octet) empilera 4 octets, pas 1 seul. Et ce n'est pas vraiment une promotion, c'est 1 octet + 3 octets inutilisés.
 
effectivement ce ne sont pas toutes les promotions, caster de char vers short ça restera de 8 à 16 bits, mais là je parle de l'empilement, et sur archi x86.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed