Getchar en C
Résolu/Fermé
darkouna
-
22 juil. 2009 à 12:53
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 juin 2012 à 17:32
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 juin 2012 à 17:32
6 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
22 juil. 2009 à 13:09
22 juil. 2009 à 13:09
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
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
22 juil. 2009 à 13:30
22 juil. 2009 à 13:30
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 }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
22 juil. 2009 à 13:49
22 juil. 2009 à 13:49
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
10 juin 2012 à 17:22
10 juin 2012 à 17:22
oui , fflush(stdin) n'est pas recommandée (n'est pas correcte*)
Pire que non recommandé, c'est non standard. Cela provoque un comportement indéterminé.
while(getchar()!='\n'); //vider buffer
La façon officielle est :
Pire que non recommandé, c'est non standard. Cela provoque un comportement indéterminé.
while(getchar()!='\n'); //vider buffer
La façon officielle est :
int c; while( (c=getchar()) != '\n' && c!= EOF);
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
10 juin 2012 à 17:24
10 juin 2012 à 17:24
Promis, je ne le ferais plus, mais en 3 ans j'ai bien progressé... je ne fais plus de C...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
10 juin 2012 à 17:32
10 juin 2012 à 17:32
Lol KX, on s'en doute. Mais je parlais à Naji qui déterrait le topic ^^.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
22 juil. 2009 à 13:42
22 juil. 2009 à 13:42
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
marven23
Messages postés
71
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
20 août 2013
2
22 juil. 2009 à 14:02
22 juil. 2009 à 14:02
Salut
Essayez getch() de la bibliotheque conio.h ça vous permet de lire un caractere sans validation par la touche entrer.
Deux inconvenients malheureusement : vous devez utiliser fflush(stdin) comme avec getchar() et cette bibliotheque conio n'est pas portable.
@plus...
Essayez getch() de la bibliotheque conio.h ça vous permet de lire un caractere sans validation par la touche entrer.
Deux inconvenients malheureusement : vous devez utiliser fflush(stdin) comme avec getchar() et cette bibliotheque conio n'est pas portable.
@plus...