Petit problème dans un de mes programmes.
Résolu/Fermé
kenseii
Messages postés
21
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
31 juillet 2015
-
3 juin 2015 à 00:38
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 juin 2015 à 23:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 juin 2015 à 23:19
A voir également:
- Petit problème dans un de mes programmes.
- Petit 3 ✓ - Forum Word
- Excel trier du plus grand au plus petit - Guide
- Petit 1 comme ² ✓ - Forum Windows
- Comment écrire un chiffre en petit caractè ✓ - Forum Bureautique
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 3/06/2015 à 10:52
Modifié par fiddy le 3/06/2015 à 10:52
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
mouloud11
Messages postés
523
Date d'inscription
mardi 22 septembre 2009
Statut
Membre
Dernière intervention
10 novembre 2019
125
3 juin 2015 à 01:47
3 juin 2015 à 01:47
Bonsoir,
Essaye de directement déclarer ta lettre en "char c".
Cordialement,
Essaye de directement déclarer ta lettre en "char c".
Cordialement,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
3 juin 2015 à 10:54
3 juin 2015 à 10:54
Bonjour,
Cela ne règlera rien du tout puisqu'il est question ici de buffer clavier.
De plus, il vaut mieux laisser en int c;.
Cdlt,
Cela ne règlera rien du tout puisqu'il est question ici de buffer clavier.
De plus, il vaut mieux laisser en int c;.
Cdlt,
3 juin 2015 à 18:52
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
3 juin 2015 à 22:51
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,
3 juin 2015 à 23:19
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 ;-)).