Faculté Informatique & Communications Cours d'informatique |
#include <fstream>Le mécanisme général pour la mise en oeuvre d'entrées-sorties est alors le suivant :
#include <iostream> #include <fstream> #include <string> using namespace std; main() { string nom_fichier("test"); ifstream fichier; // déclaration du flot en lecture fichier.open(nom_fichier); // le flot est lié au fichier "test" /* ces 2 dernières lignes peuvent être regroupées en : * ifstream fichier(nom_fichier); */ if (! fichier.fail()) { string mot; while (!fichier.eof()) { fichier >> mot; /* lecture d'un mot dans le * fichier, et affectation à la * variable "mot" */ if (! fichier.fail()) // on a effectivement pu lire qqchose cout << mot; } fichier.close (); // fermeture du flot } else { cout << "Ouverture du fichier " << nom_fichier << " impossible." << endl; } }
#include <iostream> #include <fstream> #include <string> using namespace std; main() { string nom_fichier("test"); ofstream fichier; // déclaration du flot en écriture fichier.open(nom_fichier); // le flot est lié au fichier "test" /* ces 2 dernières lignes peuvent être regroupées en : * ofstream fichier(nom_fichier); */ if (fichier.fail()) { cerr << "erreur ouverture fichier test" << endl; } else { // écriture dans le fichier fichier << 1 << " texte " << 0.75 << endl; // écrit "1 texte 0.75" fichier.close (); // fermeture du flot } }
#include <iomanip>dans l'entête de votre fichier.
Les manipulateurs s'utilisent avec cout ou cin comme des expressions à afficher :
cout << manipulateur << expression << ... << manipulateur << expression ...;
Exemples de manipulateurs :
setprecision(int dg) | indique le nombre de chiffres à afficher (partie entière et partie fractionnaire) pour les nombres réels (dg chiffres). |
setw(int size) | indique la largeur de la chaîne de caractères en entrée/sortie (largeur size). |
Utilisé avec cout la chaîne en sortie sera affichée sur size caractères | |
Utilisé avec cin, permet de lire size caractères à chaque fois. | |
setfill(char c) | sur cout, utilise le caractère c pour effectuer les alignements avec setw. |
ws | (white space) lors d'une opération d'entrée, saute les espaces (espace, tabulation, retour de ligne, ... ) : |
positionne le flot d'entrée sur le prochain caractère non blanc. | |
dec | affiche les nombres en décimal. |
hex | affiche les nombres en hexadécimal (base 16). |
oct | affiche les nombre en octal (base 8). |
cout << setw(10) << x;
Ceci affiche la valeur de x sur une largeur de 10 caractères. Si plus de caractères sont nécessaires, ils sont ajoutés en nombre juste suffisant pour l'affichage.
Note : Le manipulateur setw() a une caractéristique unique. Alors que les autres manipulateurs sont des options permanentes (les changements affectent toute la suite des entrées/sorties), la largeur indiquée par setw() est valide seulement pour l'objet suivant dans le flot d'entrée/sortie. Dès que cet objet est affiché, la valeur de la largeur d'affichage revient à la valeur par défaut (0).
string code; cin >> setw(5) >> code;Lit uniquement 5 caractères.
cout << hex << 123 << endl;affiche 7b.
flot.setf(ios::option);Pour supprimer une option, faire :
flot.unsetf(ios::option);Voici les principales options :
ios::showbase | affiche la base choisie pour l'affichage, collée aux nombres afficher : rien pour la base décimale, 0x pour l'hexadécimal et 0 pour l'octal. |
ios::showpoint | affiche toujours la virgule des nombre réels, même lorsqu'ils sont entiers. |
ios::fixed | affiche les nombres réels en format fixe (normal). |
ios::scientific | affiche les nombre réels en format "scientifique", c'est-à-dire avec une puissance de 10. |
ios::left | (avec setw) effectue l'alignement à gauche plutôt qu'à droite. |
On peut pour cela utiliser getline, qui lit une ligne entière
string chaine; getline(flot, chaine);
cout.put(char ch) | affiche un caractère en sortie. |
cin.get(char ch) | lit un caractère en entrée. |
while (cin.get(ch)) cout.put(ch);Note : la commande cin.get peut être utilisée lorsque le programmeur veut lire aussi les espaces sur un flot d'entrée. Dans son fonctionnement normal, l'opérateur >> ne lit pas les espaces (e.g. [dans une boucle lisant des char via >>,] «a b c d e» donnera le même résultat de lecture que «abcde»). Par contre, le code dans l'exemple ci-dessus [qui utilise get()] écrit en sortie tous les caractères lus en entrée, les uns après les autres.