Sunteți pe pagina 1din 16

Capitolul I

Elementele de bază ale limbajului de


programare C++

Tema 4
Operații de intrare/ieșire la nivel de
consolă
Operaţii de intrare/ieşire în C++
În mod obişnuit, un program de calcul citeşte o serie de date de la
tastatură sau de pe disc şi le transferă în memoria internă alocată
programului, le prelucrează pe baza setului de instrucţiuni - prin
transferuri repetate între regiştrii de memorie şi regiştrii micro-
procesorului - şi în final le scrie sub forma prelucrată pe monitor sau
într-un fişier pe disc.
Cu alte cuvinte, un program de calcul execută operaţii de intrare
(input, read operations) prin citirea datelor, operaţii de prelucrare a
datelor şi operaţii de ieşire (output, write operations) prin scrierea
datelor.
Aceste operaţii nu se execută neapărat în ordinea dată aici, ele sunt
intercalate şi executate în mod repetat conform cu necesităţile
problemei de rezolvat.
Modul de derulare a operaţiilor de
intrare/ieşire (operaţii I/O) este specific
fiecărui dispozitiv hardware în parte,
pentru a le executa sistemul de operare
utilizează programe speciale (drivere) puse
la dispoziţie de producătorii dispozitivelor.
În limbajul C operaţiile I/O se execută
utilizând funcţii de intrare/ieşire, iar în
limbajul C++ utilizând clase de
intrare/ieşire.
În C++ obiectele date de clasele
specializate în operaţii I/O se numesc
fluxuri de date sau stream-uri. Toate
compilatoarele de C++ sunt dotate cu
biblioteci I/O standardizate, care
furnizează clase de stream-uri gata
implementate.
Biblioteca standard C++ <iostream> permite lucrul cu mai
multe categorii de stream-uri. Dintre acestea vom discuta în
continuare despre stream-urile cu consola, dispozitivul standard
de intrare-ieșire, altfel spus stream-uri care permit citirea de la
tastatură și afișarea pe ecran.
Stream-ul de ieșire cout
În cele mai multe cazuri, dispozitivul standard de ieșire este ecranul
și poate fi accesat cu stream-ul cout. Pentru aceasta, cout se folosește
împreună cu operatorul de inserție <<, urmat de data care se va afișa:

Operatorul cout afișează în stream-ul din stânga valoarea din


dreapta. Să observăm că "Salut" este delimitat de ghilimele, deoarece
este o constantă literal de tip șir de caractere, iar n nu este delimitată
de ghilimele, deoarece este o variabilă.
Exemple
Dacă textul care urmează după << este între ghilimele, se va afișa ca atare.
Dacă nu este între ghilimele, se consideră că este o variabilă, și se afișează
valoarea ei.

Putem afișa mai multe valori în aceeași instrucțiune:


Exemple:

endl produce un caracter rând nou, exact ca și inserarea lui \n, dar mai face
ceva: endl golește buffer stream-ului cout, adică forțează afișarea pe ecran tuturor
caracterelor inserate în stream până în acest moment. endl produce întârzieri în
execuția programului, deci trebuie folosit cu precauție.
Stream-ul de intrare cin
În cele mai multe cazuri, dispozitivul standard de intrare este
tastatura și poate fi accesat cu stream-ul cin. Pentru
aceasta, cin se folosește împreună cu operatorul de extragere >>,
urmat de variabila în care se va memora valoarea extrasă
(variabila care se va citi):

Mai întâi se declară variabila n, apoi se citește o valoare pentru ea – se


extrage din cin o valoare care se memorează în variabila n.
La execuție, programul așteaptă să se introducă o valoare de la tastatură. De
fapt, caracterele introduse sunt transmise programului numai când se apasă
tasta ENTER.
Exemplu

La operația de extragere din cin contează tipul variabilei de după >>.


Caracterele din stream sunt interpretate în funcție de tipul variabilei.
Dacă aceste caractere nu corespund cu tipul variabilei, operația de
extragere eșuează.
Dacă operația de extragere din stream eșuează:
•variabila nu se modifică și se setează un marcaj de eroare (failbit) –
până la C++11;
•variabila primește valoarea 0 și se setează failbit. Dacă valoarea extrasă
depășeste limitele tipului variabilei, aceasta primește valoarea maximă sau
minimă a tipului său și se setează failbit – de la C++11.
Exemple:

Una dintre cele mai frecvente erori este inversarea


operatorilor pentru stream-urile cin și cout, sau citirea valorii
unei constante.
Următoarele instrucțiuni sunt greșite:
Utilizarea funcțiilor din bibliotecile
standard
Biblioteca <cmath> conține un set de funcții matematice foarte utile:
Biblioteca <climits> conține constante cu valorile minime/maxime
ce pot fi stocate pe tipurile de date fundamentale.
De exemplu, INT_MIN și INT_MAX sunt constantele
corespunzătoare tipului int. Sunt utile când
vrem să inițializăm o variabilă cu o valoare foarte mică sau foarte
mare, pentru a calcula maximul/minimul dintre mai multe numere.
Biblioteca <cassert>Aici este definită funcția assert(expresie). Dacă
expresia transmisă ca parametru se evaluează la 0 (false), se
abandonează execuția programului, afișându-se o eroare de
genul Assertion failed: expresie, file main.cpp, line 7.

assert(cin >> x); // Se verifică dacă x a putut fi citit.


assert(1 <= x && x <= 100);
// Se verifică dacă x aparține intervalului [0, 100].
Biblioteca <ctime> se ocupă de lucrul cu unitățile de timp. Exemplu
de 2 funcții definite:
time(NULL)
Returnează timpul curent, exprimat în secunde, sub forma unei
variabile de tipul time_t (care de fapt e un typedef la int). Secundele sunt
numărate de la 1 ianuarie 1970, ora 00:00.
clock()
Returnează numărul de tic-uri ale ceasului trecute de la începerea
execuției programului. Un tic poate fi echivalat în mod normal cu o
milisecundă. Această funcție folosește și ea un tip special de
date, clock_t, dar și acesta este un alias al int-ului.
Biblioteca <cstdlib> definește niște funcții „comune”,
care pot fi grupate astfel:

Deoarece în C++ există


operatorii new și delete, funcțiile
astea nu prea își mai au rostul.
Biblioteca <cstdlib>
Biblioteca <cstdio> conține funcții specifice pentru lucrul cu
fișiere.
Biblioteca <cstring> conține funcții pentru lucrul cu string-uri C-
style.
Fișierul antet <conio.h> este declarata o functie care are ca efect
ștergerea ferestrei: curente (mai exact, fereastra curentă, care
implicit coincide cu întreg ecranul, este colorată în culoarea de
fundal- implicit negru):
Daca dorim sa schimbam culoarea de fundal, putem apela funcția
textbackground (), declarata tot în conio.h

S-ar putea să vă placă și