Création
d'entreprise
Posez votre question Signaler

Prb. Vider buffer clavier en C

Larry - Dernière réponse le 26 oct. 2004 à 18:23
Bonjour.

J'ai des saissies à faire en C, avec C++ Builder 6.

********************
création du client

Nom: Pronto
Prénom: Larry
Numéro civique: 48
Rue: Ville:
********************

Le résultat est entre les étoiles, en Gras ce sont les valeurs entrées.

Je n'arrive pas a entrer la" Rue", car il y a quelque chose dans le tampon(buffer) du clavier et saute directement à la saissie de "Ville". J'ai tenté cin.clear(), cin.ignore(1, '\n'), ou les deux ensembles, puis cin.fail() avec les deux précédents. Je n'arrive pas a comprendre ce qu'il y a dans le buffer, et comment vider le buffer. Ci-inclus, vous trouverai cet exemple.

J'utilise une macro, qui est insérée avec chaque lecture

#include <conio.h>
#include <iostream.h>

//------------------------------------------------------------------------

#define CLR_BUFFER if (cin.fail()) {\
                        cin.clear();\
                        cin.ignore(80,'\n');}

void main(void)
{
string Nom, Prenom, NoCivique, Rue, Ville;

clrscr();

cout << "\ncr\x82" "ation du client"
     << "\n\nNom: ";
getline(cin, Nom);
CLR_BUFFER;
cout << "Pr\x82nom: ";
getline(cin, Prenom);
CLR_BUFFER;
cout << "Num\x82ro civique: ";
cin >> NoCivique;
CLR_BUFFER;
cout << "Rue: ";
getline(cin, Rue);
CLR_BUFFER;
cout << "Ville: ";
getline(cin, Ville);
CLR_BUFFER;

getch();
}
//------------------------------------------------------------------------




Merci de vous pencher sur mon problème.

Larry
Lire la suite 

Prb. Vider buffer clavier en C »

3 réponses
Réponse
+0
moins plus
je crosi (de mémoire) qu'il y a un truc du style

cin.flush()

à vérifier ?????

Time RUNNER
Ajouter un commentaire
Réponse
+0
moins plus
Salut!

De mémoire cin ne fait pas parti du standard C.

/* en c */

#include <stdio.h>
int fflush(FILE *stream);

/* en c++ */

#include <cstdio>
int fflush(FILE*stream);

/* exemple en c */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	/* blablabla */

	/* vider le tampon du flux d'entree */

	fflush(stdin);
	return EXIT_SUCCESS;
}
Ajouter un commentaire
Réponse
+0
moins plus
Merci beaucoup,


Ca fonctione maintenant.

Mais quelqu'un peut-il m'expliquer la différence entre cin.clear() et
fflush(stdin)?

Moi qui jouait avec les cin.fail(), cin.clear(), cin.ignore(80,'\n') pour tenter de nettoyer le tampon et de le réactiver.

Merci


Larry
Ajouter un commentaire
Ce document intitulé « Prb. Vider buffer clavier en C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?