Petit problème dans un de mes programmes.
Résolu
kenseii
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
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 -
A voir également:
- Petit problème dans un de mes programmes.
- Trier du plus petit au plus grand excel - Guide
- Petit 3 ✓ - Forum Word
- Petit 2 ✓ - Forum Windows
- Petit 9 - Forum Mail
- Symbole des mètre cubes ✓ - Forum Word
2 réponses
Bonjour,
Lorsque tu utilises scanf("%d", ...);, il y a un retour chariot dans le buffer clavier (puisque tu dois appuyer sur entrée pour valider la saisie du nombre).
Si par la suite, tu utilises c=getchar(); c contiendra le code ascii du retour chariot sans même te demander la moindre saisie.
L'idée est de vider le buffer clavier. Dans ton cas, tu peux utiliser simplement :
Cdlt,
Google is your friend
Lorsque tu utilises scanf("%d", ...);, il y a un retour chariot dans le buffer clavier (puisque tu dois appuyer sur entrée pour valider la saisie du nombre).
Si par la suite, tu utilises c=getchar(); c contiendra le code ascii du retour chariot sans même te demander la moindre saisie.
L'idée est de vider le buffer clavier. Dans ton cas, tu peux utiliser simplement :
getchar();juste avant d'appeler c=getchar(); et tout rentrera dans l'ordre.
Cdlt,
Google is your friend
Merci, effectivement cela fonctionne.
qu'entends-tu par "buffer clavier" ?
j'ai essayé aussi de mettre: fflush(stdin); juste avant le c=getchar(); et ça marche tout autant :)
Merci
Il faut savoir qu'en C, lorsque tu utilises une fonction de lecture sur stdin (donc getchar(), scanf(...), etc.)., tu ne demandes pas directement à l'utilisateur de taper un nombre mais passe par un buffer (le buffer clavier).
S'il est vide, l'utilisateur sera invité à saisir son mot. Les caractères non lus seront stockés dans le buffer.
S'il est non vide, ce buffer valorisera la variable sans rien demander à l'utilisateur.
Cdlt,
La fonction fflush() provoque un comportement indéterminé sur stdin... Donc, à bannir. Cela peut fonctionner (j'imagine que tu utilises un compilateur microsoft ;-), pas vrai ?), mais ce n'est absolument pas portable. La manière standard de vider le buffer est de construire sa fonction :
Mais dans ton cas, un simple getchar(); suffit (sauf si tu veux faire un programme robuste, mais dans ce cas, d'autres choses sont à revoir dans le code ;-)).