Lecture formatée

L’opérateur >> est redéfini pour les flots d’entrée sous la forme istream& operator>>(type&), pour tous les types prédéfinis, et sous la forme istream& operator>>(char*) pour les chaînes de caractères.

L’effet obtenu est le suivant, en fonction du type de l’opérande :

Dans tous les cas, si la fin de fichier est rencontrée en cours de lecture, rien n’est placé dans la variable et le bit failbit est positionné.

Comme le résultat est une référence sur le flot d’entrée courant, on peut chaîner les lectures. Voici quelques exemples :

int i, j;float f;char chaine[40];cin >> i >> j;// si vous écrivez : 145 789634// alors i devient 145 et j 3202 == 789634 % 65536cin.setf(ios::hex, ios::basefield);cin >> i;// si vous écrivez : 07a89 // alors i devient 0x7A89cin.setf(ios::dec, ios::basefield);cin >> i;// si vous écrivez : 077// alors i devient 77 (et non la valeur octale 077 égale à 63)cin >> d;// si vous écrivez : 125.89e-14// alors d devient 1.2589E-12cin.width(39);    // n’oubliez pas  le zéro finalcin >> chaine;// si vous écrivez : "Bonjour !"// alors la chaine devient "\"Bonjour" (8 caractères // plus zéro final), car la lecture s’arrête au// premier espace rencontré

La suppression des espaces initiaux, notamment pour les lectures de chaînes de caractères, peut être invalidée en mettant à 0 le bit ios::skipws du champ de format.

On peut évidemment aussi redéfinir l’opérateur d’entrée pour les nouvelles classes.

Exercice 9.1

Définir un opérateur d’entrée pour la classe fraction du chapitre 7.

Voir solution
Précédent Précédent Sommaire Sommaire Suivant Suivant