Ce face std::cin
std::cin (de la „character input”) este intrarea standard: de obicei, ce scrie utilizatorul la tastatură. Operatorul >> citește o valoare și o pune în variabilă, transformând-o automat în tipul variabilei (int, double, std::string).
>> sare peste spațiile de la început și se oprește la primul spațiu, tab sau rând nou. De aceea, pentru un text cu spații (un nume complet, o adresă) folosești std::getline.
Dacă utilizatorul scrie altceva decât se așteaptă (litere în loc de număr), citirea eșuează: variabila primește 0, iar std::cin intră în stare de eroare și ignoră citirile următoare până la std::cin.clear(). Condiția if (std::cin >> x) îți spune dacă citirea a reușit.
Ce returnează
Expresia std::cin >> x returnează tot std::cin. Folosit într-o condiție, este adevărat dacă citirea a reușit.
Exemple
Exemplul 1: Citirea unui nume și a unei vârste
Valorile sunt separate prin spațiu sau Enter; >> le citește în ordine.
#include <iostream>
#include <string>
int main() {
std::string nume;
int varsta;
std::cout << "Cum te cheamă și câți ani ai? ";
std::cin >> nume >> varsta;
std::cout << "\nSalut, " << nume << "! Peste 10 ani vei avea " << varsta + 10 << " ani.\n";
}
Ce scrie utilizatorul (intrare)
Ana 21
Rezultat
Cum te cheamă și câți ani ai?
Salut, Ana! Peste 10 ani vei avea 31 ani.
Exemplul 2: Citirea numerelor până la sfârșitul intrării
Bucla while (std::cin >> nota) se oprește când nu mai sunt date (sau când apare ceva ce nu este număr).
#include <iostream>
int main() {
int nota, suma = 0, cate = 0;
while (std::cin >> nota) {
suma += nota;
++cate;
}
std::cout << "Note citite: " << cate << '\n';
std::cout << "Media: " << static_cast<double>(suma) / cate << '\n';
}
Ce scrie utilizatorul (intrare)
9 7 10
8
Rezultat
Note citite: 4
Media: 8.5
Exemplul 3: Ce se întâmplă când utilizatorul greșește
Textul zece nu este număr, deci citirea eșuează, x devine 0, iar std::cin rămâne în stare de eroare până la clear().
#include <iostream>
#include <string>
int main() {
int x = 5;
if (!(std::cin >> x)) {
std::cout << "Nu ai scris un număr. x = " << x << '\n';
std::cin.clear(); // scoatem fluxul din starea de eroare
std::string gresit;
std::cin >> gresit; // consumăm textul greșit
std::cout << "Ai scris: " << gresit << '\n';
}
std::cin >> x;
std::cout << "A doua încercare: x = " << x << '\n';
}
Ce scrie utilizatorul (intrare)
zece
10
Rezultat
Nu ai scris un număr. x = 0
Ai scris: zece
A doua încercare: x = 10
Greșeli frecvente
- Citești un nume cu spații cu
std::cin >> nume: pentru „Ana Maria” primești doar „Ana”, iar „Maria” rămâne pentru următoarea citire. Foloseștestd::getline. - Amesteci
std::cin >>custd::getline: după>>, Enter-ul rămâne în intrare șigetlinecitește un rând gol. Punestd::cin >> std::wssaustd::cin.ignore(...)între ele. - Nu verifici dacă citirea a reușit. După o citire eșuată, toate citirile următoare sunt ignorate în tăcere și programul lucrează cu valori greșite.
Comenzi înrudite
std::getline: Citește un rând întreg, cu spații cu tot, într-un std::string.std::cout: Afișează text și valori în consolă, cu operatorul <<.std::istream::ignore: Sare peste caractere din intrare, de obicei până la sfârșitul rândului curent.std::istream::eof: Verifică starea unui flux: eof (sfârșitul datelor) și fail (citire eșuată).std::scanf: Citește valori formatate de la tastatură în stil C, primind adresele variabilelor.