cs_Darkroro
Messages postés2Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention18 novembre 2005
-
17 nov. 2005 à 18:21
cs_ibn adam
Messages postés1Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention18 novembre 2005
-
18 nov. 2005 à 22:17
Je m'explique :
j'ai un programme qui à un moment demande de saisir un char, pour ce faire, j'ai une fonction :
dans mon programme je fais suivre l'appel de cette fonction par une instruction de test :
printf("Caract = %c\n", caract);
Le problème est qu'il ne prend en compte ma saisi qu'une fois sur deux !
Exemple :
...Début du programme
...
Saisir un caractère : a ==> là j'ai donc saisi a et fait entrerCaract > là ça devrait afficher "Caract = a"
...
Si je fais plusieurs fois de suite la saisi du caractère, on s'aperçoit que la saisie est "décalée" !
Exemple :
...Début du programme
...
Saisir un caractère : a ==> je tappe a et fait entrerCaract > devrait afficher "Caract = a"
...
Saisir un caractère : b ==> je tappe b et fait entrerCaract a > devrait afficher "Caract = b"
...
Saisir un caractère : c ==> je tappe c et fait entrer
Caract = b . . . et ainsi de suite
J'ai essayer de régler le problème en utilisant getchar au lieu de scanf mais dans ce cas, il saute carrement la saisie.
Lord_Patoche
Messages postés196Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 1 mai 20093 17 nov. 2005 à 23:24
salut.
1) déclares caract
2) scanf("%c", &caract); // Utilise l'adresse de caract
3) lorsque tu effectues un scanf cela constitue une entrée clavier. il arrives qu'il faille vider la mémoire tampon aant de faire un nouvel appel à l'entrée clavier. Ainsi, si tu t'aperçois que ton programme ne prend pas en compte ton deuxièe scanf, intègre un appel getchar( ) avant.
cs_Darkroro
Messages postés2Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention18 novembre 2005 18 nov. 2005 à 04:00
Juste une petite question : comment se fait-il que je doive vider le buffer ? Si je ne me trompe pas je ne met rien dedans . . . pourtant je confirme ce que tu dis, si je ne mets pas de getchar il me saute caremment la première saisie puis une saisi après chaque saisie réussi !
C'est vraiment bizarre . . . m'enfin en tout cas ça marche maintenant !
Merci Beaucoup !
Lord_Patoche
Messages postés196Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 1 mai 20093 18 nov. 2005 à 19:27
Un programmeur je pense pourrais te donner la réponse exacte de ce phénomène. De ce que j'en sais, cela s'apparente à la forme brute de la fonction scanf. Lorsqu'on entre quelque chose au clavier, cela rempli une mémoire tampon (indépendente de ta variable.) Ensuite, ce tampon se vide et son contenu va où tu le demande (écran, imprimante, variable...) Cependant, d'après ce que j'ai compris, la mémoire tampon ne se vide jamais entièrement et pour se faire, il faut envoyer une procédure spécifique. Il me semble que sous C++, il existe des procédures explicites tel que flush() ou quelque chose comme ça. Je l'ai déjà essayé mais sans succès, alors j'utilise getchar() qui n'est pas prévu pour cela à l'origine, mais c'étais ce que j'avais lu dans un bouquin de C, et la ça marche.
LaPatoshe
Vous n’avez pas trouvé la réponse que vous recherchez ?