You are on page 1of 5

Operaii I/O n limbajul C++

Operaii de
intrare/ieire n C++

Limbajul C++ motenete de la C funciile de


I/O
Dezavantaj:

permit manipularea doar a tipurilor de

baz

Limbajul C++ introduce o ierarhie de clase


pentru a realiza operaiile de intrare/ieire (I/O)
n Aceast ierarhie are la baz conceptul de
stream (flux)

Mihai Gabroveanu

Operaii de I/O n limbajul C++

Operaii I/O n limbajul C

Ce este un stream?

Biblioteca standard stdio.h i conio.h


n Fiiere text

printf/fprintf

scantf/fscanf

Stream-ul este un concept abstract care nglobeaz


orice flux de date de la o surs (canal de intrare) la
o destinatie (canal de ieiere)
Biblioteca standard ce nglobeaz ierarhia de clase
pentru opretaii de I/O
#include <iostream.h> // compilatoare vechi
sau
#include <iostream>
using namespace std;

Fiiere binare
fread
fwrite

Operaii de I/O n limbajul C++

Operaii de I/O n limbajul C++

Ierarhia de clase I/O

Formatarea ieirii
n

Funcii pentru formatarea ieirii


long setf(long indicator);//activarea indicatorilor de format
long unsetf(long indicator);
int width(int w);
int precision(int p);
char fill(char ch);

Operaii de I/O n limbajul C++

Stream-uri standard
n

Exemplu
#include <iostream>
using namespace std;

Stream-uri standard
cin obiect de tip istream (stream-ul standard de intrare)
cout obiect de tip ostream (stream-ul standard de ieire)
cerr obiect de tip ostream (stream-ul standard de eroare)

Operaii de I/O n limbajul C++

Operatori
Inserare <<
Extragere >>

void main(){
cout << 128 << endl ;// afiarea se face pe dimensiune implicita
cout.unsetf(ios::dec);//dezactivez afisarea in zecimal
cout.setf(ios::hex);// activez afisare in hexazecimal
cout.setf (ios::showbase);//se afiseaza baza
cout << 255 << endl ;
cout.setf(ios::scientific);
cout << 123.456;
}

128
0xff
1.234560e+002
Operaii de I/O n limbajul C++

Operaii de I/O n limbajul C++

Exemplu

Manipulatori

#include <iostream>

using namespace std;


int main(){
cout << 123 << endl ;// afiarea se face pe dimensiune implicita
cout.width(10);// se modifica cmpul la dimensiunea 10
cout << 123 << endl ;
cout.width(10);// se modifica cmpul la dimensiunea 10
cout.fill('*');// se stabilete caracter de umplere '*'
cout << 123 << endl ;
cout.width(10);// se modifica cmpul la dimensiunea 10
cout.precision(2);// se specifica afiarea cu precizie 2
cout.setf(ios::fixed);// fixed este activat
cout << 123.456 << endl;
123
return 0;
123
}

*******123
****123.46

Manipulatorii definii sunt:


dec
- activeaz bitul dec (la intrare/ieire)
hex
- activeaz bitul hex (la intrare/ieire)
oct
- activeaz bitul oct (la intrare/ieire)
endl
- insereaz caracterul \n i golete tamponul (la
ieire)
flush
- golete tamponul (la ieire)
setfill(int)
- stabilete caracterul de umplere;
setprecision(int)
- stabilete precizia pentru numere n
virgul mobil;
setw(int) - stabilete dimensiune cmpului pentru operaia
urmtoare

Operaii de I/O n limbajul C++

Manipulatori

Operaii de I/O n limbajul C++

11

Exemplu

Formatarea se mai poate realiza i cu ajutorul


manipulatorilor
n Un manipulator primete ca parametru i
ntoarce ca rezultat adresa fluxului asupra
cruia trebuie s acioneze, astfel c pot fi
inserai n expresiile de intrare/ieire.

Operaii de I/O n limbajul C++

10

#include <iostream>
#include <iomanip>
using namespace std;
int main(){
cout << 123 << endl ;
cout << hex << showbase << 123 << endl ;
cout << oct << showbase << 123 << endl ;
cout << 1234.56 <<endl;
cout << setprecision(2) << setw(10) <<setfill('*') <<
setiosflags(ios::fixed);
cout << 1234.56 <<endl;
return 0;
}
123

0x7b
0173
1234.56
***1234.56
Operaii de I/O n limbajul C++

12

Operaii de intrare/ieire cu fiiere


n

Operaii de intrare/ieire cu fiiere

Operaiile de intrare/ieire cu fiiere se fac prin


intermediul claselor

ios::append - adauga la sfarsitul fisierului;


ios::atend - pozitioneaza pointer-ul la sfarsitul fisierului,
insa informatiile pot fi scrise oriunde in cadrul fisierului;
ios::truncate - este modul de deschide implicit: vechiul
continut al fisierului este pierdut;
ios::nocreate - daca fisierul nu exista, atunci operatia
esueaza;
ios::noreplace - daca fisierul deja exista, atunci operatia
esueaza.
ios::binary deschide fiierul in mod binar.

ifstream
ofstream
fstream

Operaii de I/O n limbajul C++

13

Operaii de intrare/ieire cu fiiere


n

Moduri de deschidere a fisierelor

Operaii de I/O n limbajul C++

Operaii de intrare/ieire cu fiiere


n

Constructori

ofstream::ofstream(const char* name,ios::openmode = ios::out | ios::trunc);


ifstream::ifstream(const char* name, ios::openmode = ios::in);
fstream::fstream(const char* name, ios::openmode = ios::in | ios::out);

Rezultatul operatiilor de intrare/iesire poate fi testat prin


intermediul a patru functii membre:

eof() verifica daca s-a ajuns la sfarsitul fisierului;

bad() verifica daca s-a executat o operatie invalida;

fail() verifica daca ultima operatie a esuat;

good() verifica daca toate cele trei rezultate precedente sunt false.

nchiderea unui fiier se face apelnd funcia

Operaii de I/O n limbajul C++

15

14

close()

Operaii de I/O n limbajul C++

16

Exemplu

Exemplu

#include <conio.h>
#include <iostream>
#include <fstream>

ifstream in("output.txt");
if (!in){
cerr<<"Eroare deschidere";
exit(0);
}
while(!in.eof()){
in>>t;
if (in.good()){
cout<<t<<endl;
}
}
in.close();
getch();

using namespace std;


int main(){
int n=10, t;
ofstream out("output.txt");
for(int i=0;i<n;i++)
out<<i*i<<endl;
out.close();
}

#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int n=10, t;
ofstream out("output.bin",
ios::binary);
for(int i=0;i<n;i++)
out.write(reinterpret_cast<char*>(&i),
sizeof(i));

ifstream in("output.bin",ios::binary);
if (!in){
cerr<<"Eroare deschidere fisier";
exit(0);
}
while(!in.eof()){
in.read(reinterpret_cast<char*>(&t),
sizeof(t));
if (in.good()){
cout<<t<<endl;
}
}
in.close();
getch();
}

out.close();

Operaii de I/O n limbajul C++

17

Scrierea ntr-un fiier binar se face cu funcia

Obinerea poziiei ntr-un fiier se face cu:

ostream& write ( const char* s , streamsize n );


n

pos_type ostream::tellp();
pos_type istream::tellg();

Poziionarea ntr-un fiier se face cu:


ostream& ostream::seekp(off_type offset,ios::seekdir pos);
istream& istream::seekg(off_type offset,ios::seekdir pos);
unde pos poate avea una din urmatoarele valori

Citirea dintr-un fiier binar se face cu funcia


istream& read ( const char* s , streamsize n );

Operaii de I/O n limbajul C++

19

Poziionarea ntr-un fiier

Operaii de citire/scriere n mod binar


n

Operaii de I/O n limbajul C++

18

ios::beg specific poziia de la nceputul stream-ului;


ios::end specific poziia de la sfritul stream-ului;
ios::beg specific poziia curent a stream-ului;

Operaii de I/O n limbajul C++

20

You might also like