Stream | Descriere |
---|---|
cin | Stream standard de intrare |
cout | Stream standard de ieșire |
cerr | Stream standard de afișare a erorilor |
clog | Stream standard de afișare a logărilor |
cout
și cin
(stream-urile standard pentru ieșire, respectiv intrare); cerr
și clog
reprezintă tot stream-uri de ieșire, deci ele lucrează, în esență,ca și cout
, cu singura diferență că identifică stream-uri cu un anumit scop: mesajele de eroare și logările; iar, de cele mai multe ori, în cele mai multe setări de mediu, ele fac exact același lucru: afișează pe ecran, deși se poate face redirecționarea lor.cout
.cout
se folosește împreună cu operatorul de inserare, care se scrie cu simbolul <<
(adică două semne ”mai mic decât”).
|
|
<<
inserează datele care urmează în stream-ul care îl precede. În exemplele de mai sus, inserează string-ul de caractere Instructiune de iesire
, numărul 120
și valoarea variabilei x
în stream-ul standard de ieșire cout
. Să observăm că mesajul din prima instrucțiune este cuprins între ghilimele ("
) deoarece este un string (șir de caractere), în timp ce în ultima x
nu este. Ghilimelele sunt cele care fac diferența între un text (cel care este cuprins între ele) care va fi afișat pe ecran exact așa cum este și identificatorii de variabile (care nu sunt cuprinși între ghilimele) ce se interpretează, afișându-se pe ecran valorile lor. De exemplu, aceste două instrucțiuni au rezultate foarte diferite:
|
|
|
|
Aceasta este o singura instructiune C++
. Înlănțuirea de inserții este foarte utilă în afișarea mixtă de mesaje și variabile cu o singură instrucțiune:
|
|
Eu am 24 ani si codul meu postal este 90064
cout
:Aceasta este o propozitie.Aceasta este o alta propozitie.
\n
(adică un caracter backslash urmat de litera mică n
). De exemplu:
|
|
Prima propozitie.
A doua propozitie.
A treia propozitie.
endl
poate fi folosit pentru a întrerupe liniile. De exemplu:
|
|
Prima propozitie.
A doua propozitie.
endl
produce un caracter newline, exact ca și inserarea cu '\n'
; dar are, totuși un comportament diferit: buffer-ul de stream (dacă există) este curățat, ceea ce înseamnă că ieșirea necesită scrierea fizică la dispozitiv, dacă nu s-a făcut deja. Aceasta afectează, în principal, stream-urile cu buffer plin și cout
nu este (în general) un stream cu buffer plin. Este o idee bună să folosim endl
numai când curățarea stream-ului ar fi un lucru pe care nu îl poate face '\n'
. Să reținem că operația de curățare aduce o suprasolicitare și unele dispozitive pot fi mai încete, producând întârzieri.cin
.cin
se folosește împreună cu operatorul de extragere, pentru care folosim simbolul >>
(adică două semne "mai mare decât"). Acest operator este urmat de variabila în care va fi depusă informația extrasă. De exemplu:
|
|
int
denumită varsta
, iar a doua extrage din cin
o valoare ce va fi memorată în ea. Această operație face ca programul să aștepte o intrare de la cin
; în general, aceasta înseamnă că programul va aștepta după utilizator să introducă o secvență de la tastatură. În acest caz, rețineți că toate caracterele tastate sunt transmise programului numai câdn este apăsată tasta ENTER (sau RETURN). Când se ajunge la instrucțiunea cu operația de extragere din cin
, programul va aștepta atât cât este necesar până când sunt introduse date.cin
folosește tipul variabilei de după operatorul >>
pentru a determina cum să interpreteze caracterele citite de la intrare; dacă este un întreg, formatul așteptat este o serie de cifre, dacă este un string se așteaptă o secvență de caractere, etc.
|
|
Va rugam, introduceti o valoare intreaga: 702 Valoarea introdusa este 702 si dublul sau este 1404. |
cin
pare să facă foarte simplă și directă sarcina de extragere a datelor de la intrarea standard. Dar această metodă are și un mare neajuns. Ce se întâmplă în exemplul de mai sus dacă utilizatorul introduce ceva ce nu poate fi interpretat ca număr întreg? Ei bine, în acest caz, operația de extragere eșuează. În mod implicit, aceasta permite prograumului să continue fără atribuirea unei valor varabilei i
, producând rezultate nedeterminate dacp valoarea lui i
va fi folosită mai târziu.cin
, fără un control mai serios. Puțin mai târziu vom vedea cum poate fi folosis stringstreams pentru a avea un control mai bun asupra intrărilor date de utilizator. cin
pot, de asemenea, să fie înlănțuite, atfelt încât să se ceara mai multe informații într-o singură instrucțiune:
|
|
|
|
a
, iar cealaltă pentru variabila b
. Se poate folosi orice fel de spațiu pentru a separa două operații consecutive de intrare; poate fi spațiu, tab sau un caracter new-line.cin
pentru a obține șiruri de caractere la fel ca și cu celelalte tipuri de date fundamentale:
|
|
cin
ia în considerare separatorii (caracterele spațiu, tab, new-line...) ca terminatori ale valorii ce trebuie extrase și, de aceea, extragerea unui string înseamnă că se va prelua numai un singur cuvânt, nu o intreagă frază sau propoziție.cin
, există o funcție numită getline
, care ia stream-ul (cin
) ca prim argument și variabila string ca al doilea argument. De exemplu:
|
|
Cum te numesti? Homer Simpson Hello Homer Simpson. Care este echipa ta favorita? The Isotopes Mie imi place The Isotopes , de asemenea! |
getline
, am folosit același identificator de string (sirul_meu
). În al doilea apel, programul doar a înlocuit conținutul anterior cu cel nou care a fost tastat.getline
pentru a obține date de intrare de la utlizator. De aceea, numai dacă aveți un motiv serios să nu o faceți, ar trebui să utilizați getline
pentru preluarea datelor de intrare în programele consolă, în loc de extragerea din cin
.<sstream>
definește un tip numit stringstream
care permite ca un string să fie tratat ca stream și, deci, să fie permise operațiile de extragere și inserare din/în string-uri în același fel ca și pentru cin
și cout
. Această caracteristică este foarte utilă în convertirea string-urilor la valori numerice și invers. De exemplu, pentru a extrage un întreg dintr-un șir putem scrie:
|
|
string
cu valoarea inițială "1204"
și o variabilă de tip int
. Apoi, a treia linie folosește această variabilă pentru a extrage dintr-un stringstream
construit din string. Această secvență de cod memorează valoarea numerică 1204
în variabila numar
.
|
|
Introduceti pretul: 22.25 Introduceti cantitatea: 7 Pretul total: 155.75 |
cin
, obținem linii într-un obiect string (sir
), apoi extragem valorile din string în variabilele pret
și cantitate
. Deoarece acestea sunt valori numerice, se pot executa operații aritmetice cu ele, precum înmulțirea lor pentru a obține valoarea totală.Previous: Operatori | Index | Next: Structuri de control |