Prb. Vider buffer clavier en C

Fermé
Larry - 26 oct. 2004 à 02:00
 Larry - 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
A voir également:

3 réponses

Time RUNNER
26 oct. 2004 à 11:20
je crosi (de mémoire) qu'il y a un truc du style

cin.flush()

à vérifier ?????

Time RUNNER
0
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;
}
0
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
0