Rechercher : dans
Par :

Prb. Vider buffer clavier en C

Dernière réponse le 26 oct 2004 à 18:23:22 Larry, le 26 oct 2004 à 02:00:51 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Prb. Vider buffer clavier en C » dans :
[Gravure] Buffer underrun (tampon vide) VoirLe problème de vidage de tampon (buffer underrun) est une erreur classique intervenant lors de la gravure d'un CD ou d'un DVD. Cette erreur provient du fait qu'un graveur doit nécessairement graver en continu, ce qui signifie que les données à...
Enregistrer une vidéo en streaming (Youtube, Dailymotion...) VoirDe plus en plus de sites diffusent du contenu vidéo en streaming, c'est-à-dire en diffusion à la demande. Ainsi, il est nécessaire d'être connecté pour pouvoir en lire le contenu, voire de se connecter à partir de la page diffusant le contenu...
AVI est un format vidéo VoirMythe .AVI est un format vidéo Réalité FAUX. Explications Conteneur et codecs .AVI n'est pas un format vidéo mais un conteneur. Il faut bien différencier deux choses: Le codec, qui est le format numérique du flux vidéo ou audio, c'est...
S-Video (Y/C) VoirLe standard S-Video Le standard S-Video (pour « Sony Video »), parfois appelé Y/C, est un mode de transmission vidéo à composantes séparées utilisant des câbles distincts pour faire transiter les informations de luminance (luminosité) et de...
Perl - Entrée et sortie standards VoirQu'appelle-t-on entrée standard et sortie standard ? Perl permet d'écrire sur la sortie standard, appelée STDOUT et de lire sur l'entrée standard (STDIN). Il s'agit de deux descripteurs fournis par le système d'exploitation et permettant...

1

Time RUNNER, le 26 oct 2004 à 11:20:08

Je crosi (de mémoire) qu'il y a un truc du style

cin.flush()

à vérifier ?????

Time RUNNER

Répondre à Time RUNNER

2

Guki, le 26 oct 2004 à 15:14:39

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;
}

Répondre à Guki

3

 Larry, le 26 oct 2004 à 18:23:22

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

Répondre à Larry