comportement de getchar()?

Le
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 .");
while ((c = getchar()) != EOF)
printf("touche: %d",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.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Luc.Habert.00__arjf
Le #23346411
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.
Nicolas George
Le #23346461
Luc Habert, dans le message
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.
Lucas Levrel
Le #23346511
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
daniel
Le #23346561
Merci a tous pour ces reponses! (je commençais à m'arracher mes derniers
cheveux :-) )
Publicité
Poster une réponse
Anonyme