En modes texte et binaire, les WS (White space) sont automatiquement consommés ce qui provoque parfois des surprises
Toutefois, nous avons le pouvoir de contrôler cela
pout tester : essayer de mettre des blancs ou tabulations dans votre texte...
Source / Exemple :
#include <iostream>
using namespace std;
//piège de l'opérateur >>
void main()
{//attention aux blancs !
char buffer[80]={0};//pratique pour mettre à zéro tout le tableau
cout << "entrer une phrase de moins de 80 caracteres:" << endl;
cin >> buffer;
cout << "voici ce que j'ai compris (car je m'arrete au premier blanc) :" << endl;
cout << buffer << endl;
cout << "mais le reste n'est pas perdu :" << endl;
cin.getline(buffer, 80);
cout << buffer << endl;
//lecture par caractère
char c;
cout << endl << "lecture par caracteres (un par un)" << endl
<< "entrer des phrases terminees par <ENTREE> " << endl
<< "mettre des blancs et tabulations dans le texte" << endl
<< "\t pour terminer : CTRL+Z (un double!):" << endl;
while (cin >> c)
cout << c;
cout << endl << "...je mange les petits blancs !" << endl;
//cin >> ws;
cin.unsetf(ios::skipws);//tenir compte des espaces et tabulations
cout << endl << "remise en bon etat technique du flux" << endl
<< "cin.good() = " << boolalpha << cin.good() << endl;
cin.getline(buffer, 80);
cin.clear();//nécessaire pour remettre le flux dans l'état good
cout << "apres cin.clear() : cin.good() = " << boolalpha << cin.good() << endl;
cout << endl << "entrer des phrases terminees par <ENTREE> " << endl
<< "mettre des blancs et tabulations dans le texte" << endl
<< "\t pour terminer : CTRL+Z (un simple!):" << endl;
while (cin >> c)
cout << c;
cout << endl;
cin.clear();//nécessaire pour remettre le flux dans l'état good
//lecture par ligne (plus performant)
cout << endl << "lecture par lignes entieres" << endl
<< "entrer des phrases terminees par <ENTREE> " << endl
<< "mettre des blancs et tabulations dans le texte" << endl
<< "\t pour terminer : CTRL+Z (un simple!):" << endl;
while (cin.getline(buffer, 80))
cout << buffer << endl;
cout << endl;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.