« Programmation C++/Les entrées-sorties » : différence entre les versions

Contenu supprimé Contenu ajouté
source cpp
Ligne 17 :
 
=== Exemple ===
<source lang="cpp">
#include <iostream>
#include <iomanipiostream>
#include <iomanip>
 
void main()
void main()
{
{
int n;
int n;
cout << "Entrez un nombre positif : ";
cin >> n;
if (n<0) cerr << "Erreur: Le nombre " << n
<< " n'est pas positif " << endl;
else cout << "Vous avez entré " << n << endl;
}
</source>
 
== Autres types de flux ==
Ligne 35 ⟶ 37 :
=== Flux de fichier ===
La classe <tt>ifstream</tt> permet de lire à partir d'un fichier. Le constructeur a la syntaxe suivante :
<source lang="cpp">
ifstream(const char* filename, openmode mode=in)
ifstream(const char* filename, openmode mode=in)
</source>
Le paramètre <tt>mode</tt> peut être une combinaison des valeurs suivantes :
;<tt>app</tt>:('''app'''end) Placer le curseur à la fin du fichier avant écriture.
Ligne 45 ⟶ 49 :
 
Exemple 1 : lire un entier depuis un fichier
<source lang="cpp">
ifstream fichier("test.txt");
ifstream fichier("test.txt");
int a;
int a;
fichier >> a; // lire un entier
fichier >> a; // lire un entier
cout "A = " << a;
cout "A = " << a;
fichier.close();
fichier.close();
</source>
 
Exemple 2 : afficher tous les caractères d'un fichier
<source lang="cpp">
ifstream fichier("test.txt");
ifstream fichier("test.txt");
while (fichier.good())
while (fichier.good())
cout << (char) fichier.get();
fichier.close();
</source>
 
La classe <tt>ofstream</tt> permet d'écrire vers un fichier. Son constructeur a une syntaxe similaire :
<source lang="cpp">
ofstream(const char* filename, openmode mode=out|trunc)
ofstream(const char* filename, openmode mode=out|trunc)
</source>
 
Exemple :
<source lang="cpp">
ofstream fichier("test.txt");
ofstream fichier("test.txt");
fichier << setw(10) << a << endl;
fichier.close << setw(10) << a << endl;
fichier.close();
</source>
 
La classe <tt>fstream</tt> dérive de la classe <tt>iostream</tt> permettant à la fois la lecture et l'écriture. Cette dernière (<tt>iostream</tt>) dérive donc à la fois de la classe <tt>ostream</tt> et de la classe <tt>istream</tt>. Son constructeur a la syntaxe suivante :
<source lang="cpp">
fstream(const char* filename, openmode mode=in|out)
fstream(const char* filename, openmode mode=in|out)
</source>
 
Exemple :
<source lang="cpp">
fstream fichier("test.txt");
fstream fichier << setw(10"test.txt") << a << endl;
fichier.seekg << setw(0,ios_base::beg10) << a << endl;
fichier >> b.seekg(0,ios_base::beg);
fichier.close() >> b;
fichier.close();
</source>
 
=== Flux de chaîne de caractères ===
Ligne 80 ⟶ 96 :
La classe <tt>istringstream</tt> dérivée de <tt>istream</tt> permet de lire à partir d'une chaîne de caractères, et possède deux constructeurs :
 
<source lang="cpp">
istringstream ( openmode mode = in );
istringstream ( const string & str, openmode mode = in );
istringstream ( const string & str, openmode mode = in );
</source>
 
Exemple :
<source lang="cpp">
int n, val;
int n, val;
string stringvalues;
string stringvalues;
stringvalues = "125 320 512 750 333";
istringstream iss (stringvalues,istringstream::in);
 
for (n=0;n<5;n++)
{
iss >> val;
cout << val << endl;
}
</source>
 
La classe <tt>ostringstream</tt> dérivée de <tt>ostream</tt> permet d'écrire pour créer une chaîne de caractères, et possède également deux constructeurs :
 
<source lang="cpp">
ostringstream ( openmode mode = out );
ostringstream ( const string & str, openmode mode = out );
ostringstream ( const string & str, openmode mode = out );
</source>
 
Le second permet de spécifier le début de la chaîne de caractères produite.
Ligne 105 ⟶ 127 :
 
Exemple :
<source lang="cpp">
ostringstream oss (ostringstream::out);
ostringstream oss (ostringstream::out);
int a = 100;
int a = 100;
oss << "Test d'écriture a=" << a << "\n";
cout << oss.str();
</source>
 
La classe <tt>stringstream</tt> dérivée de <tt>iostream</tt> permet d'écrire et lire, et possède deux constructeurs :
<source lang="cpp">
stringstream ( openmode mode = in | out );
stringstream ( const string & str, openmode mode = in | out );
stringstream ( const string & str, openmode mode = in | out );
</source>
 
Exemple :
<source lang="cpp">
int n,val;
int n,val;
stringstream ss (stringstream::in | stringstream::out);
stringstream ss (stringstream::in | stringstream::out);
 
// écriture
// écriture
ss << "120 42 377 6 5 2000";
ss << "120 42 377 6 5 2000";
 
// lecture
// lecture
for (int n=0;n<6;n++)
for (int n=0;n<6;n++)
{
{
ss >> val;
ss >> val;
cout << val << endl;
}
</source>
 
== Manipulateurs ==
Ligne 136 ⟶ 164 :
 
Exemple:
<source lang="cpp">
cout << "Une première ligne" << endl << "Une deuxième ligne" << endl;
cout << "Une première ligne" << endl << "Une deuxième ligne" << endl;
</source>
 
'''N.B.''': Certains compilateurs C++ (notamment Visual C++) ne supporte pas que le manipulateur <code>endl</code> soit suivi d'autres données à écrire. Dans ce cas, il faut écrire les données suivantes dans une nouvelle instruction :
 
<source lang="cpp">
cout << "Une première ligne" << endl;
cout << "Une deuxièmepremière ligne" << endl;
cout << "Une deuxième ligne" << endl;
</source>
 
=== Manipulateur <tt>hex</tt> ===
Ligne 153 ⟶ 185 :
 
Exemple :
<source lang="cpp">
int a=200; // 200 en décimal
int a=200; // 200 en décimal
 
cout << "Valeur de a en base 16 = " << setbase(16) << a << endl;
// affiche:cout << "Valeur de a en base 16 = C8" << setbase(16) << a << endl;
// affiche: Valeur de a en base 16 = C8
 
cout << "Valeur de a en base 10 = " << setbase(10) << a << endl;
// affiche:cout << "Valeur de a en base 10 = 200" << setbase(10) << a << endl;
// affiche: Valeur de a en base 10 = 200
 
cout << "Valeur de a en base 8 = " << setbase(8) << a << endl;
// affiche:cout << "Valeur de a en base 8 = 310" << setbase(8) << a << endl;
// affiche: Valeur de a en base 8 = 310
</source>
 
=== Manipulateur <tt>setw(''width'')</tt> ===
Ligne 168 ⟶ 202 :
 
Exemple :
<source lang="cpp">
int a=11;
int a=11;
cout << "Valeur de a = " << setw(5) << a << endl;
cout << "Valeur de a = " << setw(5) << a << endl;
</source>
 
Ce code affiche :
Ligne 178 ⟶ 214 :
 
Exemple :
<source lang="cpp">
int a=11;
int a=11;
cout << "Valeur de a = " << setfill('x') << setw(5) << a << endl;
cout << "Valeur de a = " << setfill('x') << setw(5) << a << endl;
</source>
 
Ce code affiche :
Ligne 188 ⟶ 226 :
 
Exemple :
<source lang="cpp">
double f =3.14159;
double f =3.14159;
cout << setprecision (5) << f << endl;
cout << setprecision (95) << f << endl;
cout << setprecision (9) << f << endl;
</source>
 
Ce code affiche :