begin process at 2012 05 28 14:54:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Bug de scanf, comment résoudre mon problème ? (en C)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Bug de scanf, comment résoudre mon problème ? (en C)

jeudi 17 novembre 2005 à 18:21:57 | Bug de scanf, comment résoudre mon problème ? (en C)

Darkroro

Je m'explique :

j'ai un programme qui à un moment demande de saisir un char, pour ce faire, j'ai une fonction :

void saisir_char()
{
      printf("Saisir un caractère : ");
      scanf("%c\n", caract);
}

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 entrer
Caract =                                      ==> 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 entrer
Caract =                                      ==> devrait afficher "Caract = a"
...
Saisir un caractère : b                   ==> je tappe b et fait entrer
Caract = 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.

Quelqu'un peut m'aider svp ?
jeudi 17 novembre 2005 à 18:50:39 | Re : Bug de scanf, comment résoudre mon problème ? (en C)

hbpo

Salut,

 ca bug parce que tu  mets un \n dans ton scanf.
si tu l'enlèves, ca marchera.
jeudi 17 novembre 2005 à 23:24:01 | Re : Bug de scanf, comment résoudre mon problème ? (en C)

LaPatoshe

Réponse acceptée !
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.

LaPatoshe
vendredi 18 novembre 2005 à 04:00:48 | Re : Bug de scanf, comment résoudre mon problème ? (en C)

Darkroro

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 !

vendredi 18 novembre 2005 à 19:27:07 | Re : Bug de scanf, comment résoudre mon problème ? (en C)

LaPatoshe

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
vendredi 18 novembre 2005 à 22:17:50 | Re : Bug de scanf, comment résoudre mon problème ? (en C)

ibn adam

utilise la  fonction flushall : vide tous les tampon associes a un flux d entre



Cette discussion est classée dans : problème, caractère, scanf, saisir, caract


Répondre à ce message

Sujets en rapport avec ce message

URGENT : Problème de "cin" [ par monomanahune ] Monomanahune J'ai un petit problème sur un cin.Je souhaiterais rentrer une chaine de caractère en utilisant cinmais je voudrais pouvoir entrer égaleme Aide graphisme et deplacement commandé [ par casanoveg ] Boujour à tous,Bien que j'ai encore beaucoup de choses à apprendre avant de me lancer dans le graphisme 2D en C++, je voulais quand même m'y mettre un Le cast entier ------> Caractère EN C [ par golum ] comment caster un entier en caractere EN C ? Pbl : caract=(char) intres jusqu'a 127 tout marche bien mais apres!!!!!! à partir de la 2eme moitié dela Petit programme de chaine de caractère [ par trystan007 ] J'ai un petit problème : l'utilisateur doit taper une chaine de caractère en mode console, puis, la chaine est envoyée en même tps qu'une 15aine de va HELP!!!! gérer les espace dans mon prog lors des questions [ par Ethylotek ] bijoursvoici le début de mon prog :    printf("Veuillez saisir votre nom:\n");    scanf("%s",name);    printf("Veuillez saisir le nom de votre organis concaténer un caractère a une chaine de caractères [ par deck_bsd ] Bonjour, voila g un petit problem, ds mon programe je converti un int en char, mais apres je veu le concaténer en faisant strcat(chaine_de_caract,car Problème avec scanf() insovlable ?! [ par nollyflip ] Bonjour,J'ai un souci plutôt embêtant avec scanf()Je programme sous XP et devcppDès que j'appel scanf(), la console se ferme (ca plante quoi)J'ai fait Caractère dans int [ par nashoy ] Bonjour,j'ai un petit soucis : j'ai le code suivant :int menu;scanf("%d",&menu);mais évidemment, quand on entre une lettre par exemple, il déglingue e problème de cast en langage C [ par lenneth666 ] Voilà alors j'ai deux problèmes. j'ai un caractère qui a pr valeur 3 et qd je l'affecte a un entier, ce dernier prend la valeur 51 c'est à dire le co problème scanf en C [ par lenneth666 ] voilà alors dans mon programme j'ai un scanf , mais je voudrais bloqué la saisie pour que l'utilisateur ne puisse pas entrer plus de 200 caractères, q


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales