C | C++ |
---|---|
stdin | cin |
stdout | cout |
stderr | cerr |
clog -> mesajele de eroare din clog nu ajung imediat pe ecran, ci ajung intr-un buffer; acestea ajung pe ecran in urma unui apel clog.flush() |
|
stdaux | |
stdprn |
Pentru a lucra cu fluxuri trebuie sa includem biblioteca iostream
.
Pentru fluxurile C++ de intrare de obicei este supraincarcat operatorul >>
(in stanga - fluxul, in dreapta - variabila in care se depune ce a fost de citit in flux). Pentru fluxurile de iesire este supraincarcat operatorul <<
. In C++, operatorii >>
si <<
au capatat noi valente.
In sirul de operatori >>
sau <<
aplicati unui flux de intrare/iesire pot sa apara si manipulatori - functii speciale care se folosesc numai in cadrul acestei insiruiri de operatori.
Manipulatorii pot fi:
- fara parametru - introducerea lor se face fara a folosi
()
; - cu parametru
In cazul manipulatorilor cu parametru se folosesc
()
si pentru a-i utiliza trebuie sa includem bibliotecaiomanip
. Lista manipulatori
Manipulator | Explicatie |
---|---|
dec |
se introduce in sirul de << si specifica faptul ca numerele intregi se vor afisa in baza 10 |
hex |
se introduce in sirul de << si specifica faptul ca numerele intregi se vor afisa in baza 16 |
oct |
se introduce in sirul de << si specifica faptul ca numarele intregi se vor afisa in baza 8 |
internal |
la afisarea numerelor intregi se afiseaza si baza de numeratie |
scientific |
numerele reae se afiseaza sub forma exponentiala |
ws |
scoate spatiile libere de la inceputul fluxului |
endl |
salt la o linie noua |
ends |
introduce caracterul NULL in flux |
flush |
goleste fluxul de iesire |
setiosflags (long) |
|
resetiosflags (long) |
manipulatorul invers al lui setiosflags ; pe pozitiile pe care bitii primiti sunt 1 se dezactiveaza formatarile corespunzatoare |
setw (int) |
specifica numarul de caracterre pe care se face afisarea formatata |
setbase (int) |
seteaza baza de numeratie; putem avea ca parametru 0 - baza implicita / 8 / 10 / 16 |
setfill (int) |
specifica un caracter primit ca parametru ce va fi folosit pentru umplerea spatiilor libere |
Un flux de iesire are atasat un camp de tip long
(32 de biti). O parte dintre bitii acestui camp sunt folositi pentru a specifica pentru acel flux anumite formatari folosite la afisare (baza 10/16/8 - cate un bit, aliniere la stanga / dreapta - alti biti). Daca bitul corespunzator unei formatari este 1
, acea formatare este activa. Valoarea primita ca parametru la setiosflags
activeaza formatarile pe pozitiile pe care avem 1
la bitii valorii primite ca parametru.
Exemplu: pentru alinierea la stanga a unei afisari formatate avem bitul corespunzator constantei ios::left
, iar pentru alinierea la dreapta avem alt bit corespunzator constantei ios::right
. Daca activam ambele formatari se va utiliza prima formatare gasita.
... << setiosflags (ios::right) << resetiosflags (ios::right) << setiosflags (ios::left) << ... ;
//ultimul setiosflags (ios::left) <- nu se ia in considerare
Pentru a activa alinierea la stanga inainte se face o dezactivare a alinierii la dreapta.
Din cauza ca fiecare constanta definita pentru o formatare este un numar intreg putere a lui 2, ca parametru al manipulatorilor setiosflags
si resetiosflags
putem da mai multe constante folosind operatorul |
(ȘI
- pe biti):
setiosflags(ios::right | ios::dec)
Indicatorii de formatare suntr constante intregi puteri ale lui 2 corespunzatoare bitilor de formatare ai fluxului de iesire. Acestia sunt constante statice publice, membre ale clasei ios
.
ios::indicator
// :: reprezinta operatorul de rezolutie
// ce este la dreapta LA ce este la stanga fata de operatorul de rezolutie
Indicator | Explicatie |
---|---|
ios::skipws |
sunt ignorate la citire spatiile de la inceputul fluxului de intrare |
char x,y;
cin >> setiosflags (ios::skipws) >> x >> y;
// |_|_|_|...|u|v|...|
// x = 'u'
// y = 'v'
Indicator | Explicatie |
---|---|
ios::left |
|
ios::right |
|
ios::internal |
|
ios::scientific |
|
ios::fixed |
|
ios::dec |
|
ios::hex |
|
ios::oct |
|
ios::uppercase |
numerele se afiseaza cu litere mari (A,B,C,D,E,F) |
ios::showbase |
|
ios::showpoint |
se obliga afisarea punctului la numerele reale |
ios::showpos |
la afisarea numerelor pozitive se afiseaza + |
ios::unitbuf |
se goloseste bufferul depa citire |
ios::stdio |
se face o sincronizare a fluxului de intrare C++ cu fluxul de iesire din C si invers |
Intr-un limbaj de programare superior apar o multime de denumiri de variabila, constante, nume de functii, nume de tipuri de date, etc. Intr-un program de dimensiuni medii se aduna foarte multe denumiri, existand posibilitatea ca denumirile sa se repete in diferite contexte. Astfel, denumirile aceluias context se introduc intr-un namespace separat. Referirea la o denumire dintr-un namespace se face folosind operatorul ::
.
namespace::denumire
Introducerea unui nou namespace se face astfel:
namespace nume
{
...
denumire
...
}
Atunci cand dorim sa fie cunoscute toate denumirile intr-un program folosim using namespace nume;
.
In C++ exista namespace-ul std
care contine denumiri ca cin
, cout
, cerr
, setiosflags
, setbase
, etc.