Getchar en C
Résolu
darkouna
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voilà j'essaye de récupérer le code ascii des touches entrées au clavier.
Tout va bien quand je tape une touche dans les intervalles [a-z] et [A-Z] mais si j'appuie sur une touche comprise entre 0 et 9, ça me retourne toujours la même valeur "10". Les touches <espace> et <echap> ne marchent même pas.
Mon but c'est de créer une boucle qui s'exécute tant que l'on a pas appuié sur la touche <echap> donc logiquement ça devrait être queque chose de c egenre
Code : C
int test = 0 ;
while(test!=27)
{
printf("\n Veuillez appuyer une touche sur le clavier dans les intervalles [a - z], [A - Z] et [0 - 9].\n En appyuant sur <echap> vous quittez le programme \n");
test=getchar();
printf("%d",test);
}
Voilà j'essaye de récupérer le code ascii des touches entrées au clavier.
Tout va bien quand je tape une touche dans les intervalles [a-z] et [A-Z] mais si j'appuie sur une touche comprise entre 0 et 9, ça me retourne toujours la même valeur "10". Les touches <espace> et <echap> ne marchent même pas.
Mon but c'est de créer une boucle qui s'exécute tant que l'on a pas appuié sur la touche <echap> donc logiquement ça devrait être queque chose de c egenre
Code : C
int test = 0 ;
while(test!=27)
{
printf("\n Veuillez appuyer une touche sur le clavier dans les intervalles [a - z], [A - Z] et [0 - 9].\n En appyuant sur <echap> vous quittez le programme \n");
test=getchar();
printf("%d",test);
}
6 réponses
Pour valider ton caractères tu appuies sur Entrée (caractère 10) donc ça l'affiche
De même si tu entres "abc" il t'afficheras 97, puis 98, puis 99, puis 10
De même si tu entres "abc" il t'afficheras 97, puis 98, puis 99, puis 10
Il faut que tu vides le buffer du clavier à chaque tour de boucle, j'ai simplifié le code :
char c; while(1) { printf("char : "); c=getchar(); printf("num : %d\n\n",(int) c); fflush(stdin); // vide le buffer }
Salut,
fflush(stdin); // vide le buffer
Ce n'est pas un très bonne pratique d'utiliser fflush(stdion)
Le rôle de fflush c'est de forcer l'écriture des flux.
On n'écrit pas sur stdin. Sur stdin on lit.
On risque d'avoir des belles surprises et il me semble que ça ne marche avec tous les compilateurs.
fflush(stdin); // vide le buffer
Ce n'est pas un très bonne pratique d'utiliser fflush(stdion)
Le rôle de fflush c'est de forcer l'écriture des flux.
On n'écrit pas sur stdin. Sur stdin on lit.
On risque d'avoir des belles surprises et il me semble que ça ne marche avec tous les compilateurs.
Salut,
tu appuies sur Entrée (caractère 10)
Le code ASCII 10 correspond au caractère LF (LineFeed) - bref le saut de ligne
Quand tu tapes une chiffre, test contiendra d'abord ton chiffre mais comme le saute de ligne reste dans le buffer alors il sera lu par le prochain test=getchar()
Tu pourras essayer par exemple une condition
Sinon tu peux vider le buffer avec
tu appuies sur Entrée (caractère 10)
Le code ASCII 10 correspond au caractère LF (LineFeed) - bref le saut de ligne
Quand tu tapes une chiffre, test contiendra d'abord ton chiffre mais comme le saute de ligne reste dans le buffer alors il sera lu par le prochain test=getchar()
Tu pourras essayer par exemple une condition
if (test==10) getchar();
Sinon tu peux vider le buffer avec
while(getchar()!='\n') ;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question