Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comportement de getchar()?

4 réponses
Avatar
daniel
bonjour,

voila une question probablement déja posée mais a laquelle je n'ai pas
trouvé de réponse:
je trouve sur le net un tres petit programme que je modifie pour
afficher le code numerique des touches du clavier:

#include <stdio.h>
int main ()
{
char c;

puts ("impression de la touche pressee jusque .\n");
while ((c = getchar()) != EOF)
printf("touche: %d\n",c);
return 0;
}

je m'attend a ce qu'a chaque pression sur une touche il y ait affichage
de touche: suivi de la valeur numerique associee a la touche
mais non!
voila ce qu'affiche l'ecran lorsque j'appuie sur les touches
successivement a,z,e puis <entree>

aze
touche: 97
touche: 122
touche: 101
touche: 10

qui pourrait m'expliquer ce fonctionnement? getchar() n'est-il pas censé
retourner des qu'un caractere est frappé au clavier?
question subsidiaire: j'ai essayé de rechercher sur googlegroups de des
messages traitant ce probleme sur fr.comp.lang.c mais je n'ai pu
retrouver la methode a suivre, il semble que ce ne soit plus possible.
comment faites-vous pour faire des recherches dans les archives des
groupes de news?
merci d'avance pour votre aide.

4 réponses

Avatar
Luc.Habert.00__arjf
daniel :

je m'attend a ce qu'a chaque pression sur une touche il y ait affichage
de touche: suivi de la valeur numerique associee a la touche
mais non!



C'est une question de buffering. Les terminaux sont, par défaut, bufferisés
ligne par ligne (ce qui permet une édition de lgine minimale). Le noyau
n'envoie ton « azen » à ton programme que lorsque tu appuyes sur entrée.
Avatar
Nicolas George
Luc Habert, dans le message <iq8hpd$jhm$, a écrit :
C'est une question de buffering. Les terminaux sont, par défaut, bufferisés
ligne par ligne (ce qui permet une édition de lgine minimale). Le noyau
n'envoie ton « azen » à ton programme que lorsque tu appuyes sur entrée.



Ce n'est pas vraiment une question de buffering, c'est une question
d'édition de ligne. On peut le désactiver avec stty cbreak.
Avatar
Lucas Levrel
Le 9 mai 2011, daniel a écrit :

question subsidiaire: j'ai essayé de rechercher sur googlegroups de des
messages traitant ce probleme sur fr.comp.lang.c mais je n'ai pu retrouver la
methode a suivre, il semble que ce ne soit plus possible.
comment faites-vous pour faire des recherches dans les archives des groupes
de news?



Le site hilpers.fr a une archive de groupes fr. Du coup on peut faire
des recherches du type : site:hilpers.fr comp.lang.c getchar
(enlever le fr.)

Mais Google ne met pas à jour très souvent le contenu de ce site, donc ça
ne trouve pas forcément les fils récents.

--
LL
Avatar
daniel
Merci a tous pour ces reponses! (je commençais à m'arracher mes derniers
cheveux :-) )