[C/C++ sous UNIX] problème de buffer avec fgets et cin !

problème de buffer avec fgets et cin ! [C/C++ sous UNIX] - Programmation

Marsh Posté le 30-08-2002 à 17:47:23    

Bonjour,
 
Je compile sous GNU/Linux avec gcc, et lorsque j'utilise les fonctions
de saisie de chaîne, et notamment fgets (C) ou cin (C++), j'ai des problèmes,
c'est-à-dire que (pour cin) si je fixe la taille à 10 caractères par exemple
avec cin.width(10), si je tape plus de 10 caractères le surplus est lu par le
prochain appel de cin.
Voici un exemple :
 

Code :
  1. char *a = new char[256], *b = new char[256], *c = new char[256];
  2. cin.width(10);
  3. cin >> a;
  4. cin.width(40);
  5. cin >> b;
  6. cin.width(40);
  7. cin >> c;


 
A l'exécution je tape '123456789azeqsd' pour le premier cin, et le 2eme est tout
simplement non exéctué, et b vaut 'azeqsd', puis ensuite je peux entrer
ce que je veux dans c.
 
Le problème avec fsets est du même accabit (de toute façon cin est une surcouche
de fonctions du C je me trompe ?)
 
Je sais bien sûr qu'il s'agit d'un problème de buffer, mais même si j'exécute
la fonction fflush(stdin); après la saisie de a ça ne change rien, c'est à dire
que le surplus estquand même stocké dans le buffer, et lu par le 2eme cin et
par conséquent stocké dans b ...
 
J'aimerai donc savoir comment saisir des chaînes une fois pour toutes !
De plus j'aimerai pouvoir saisir des espaces, mais la fonction getline (celle de
la classe istream, pas celle de la bibliothèque GlibC ;) ne marche pas non plus !
 
Help me ! :hello:


---------------
Du temps à perdre ? -> http://www.juju-le-barbare.fr.fm
Reply

Marsh Posté le 30-08-2002 à 17:47:23   

Reply

Marsh Posté le 30-08-2002 à 18:06:45    

:bounce:


---------------
Du temps à perdre ? -> http://www.juju-le-barbare.fr.fm
Reply

Marsh Posté le 31-08-2002 à 10:35:13    

re : :bounce:


---------------
Du temps à perdre ? -> http://www.juju-le-barbare.fr.fm
Reply

Marsh Posté le 31-08-2002 à 11:32:03    

C'est le fonctionnement normal des entrées tamponnées en C/C++...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed