Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Să se citească de la tastatură un șir de caractere ce conține spații.
Exemplu de șir cu spații: Ana are mere
(dacă folosim doar cin
, vom citi doar cuvântul Ana
).
Din fericire, există o funcție care ne ajută să citim un șir de caractere cu spații, până la întâlnirea caracterului newline
(\n
).
Funcția cin.getline
ne ajută să citim un șir de caractere ce conține și spații.
Sintaxa ei este următoarea:
cin.getline(s, dimensiune);
Și înseamnă: Citește șirul s
până la caracterul newline
, șir ce conține maximum dimensiune
caractere.
Iată un exemplu de folosire a funcției, care citește șirul cu spații și îl afișează:
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim (cu cin.getline) șirul s
char s[100];
cin.getline(s, 100); //Citim maximum 100 de caractere
cout << s;
return 0;
}
Dacă citim următorul text:
Masina de spalat
Se va afișa pe ecran același șir.
După cum am menționat mai devreme, cin.getline()
citește caractere până la apariția caracterului newline
. Acest lucru merge cum ne-am fi gândit în mod normal, dar dacă de exemplu citim ceva cu cin>>
înainte să citim cu cin.getline
, vom obține următorul comportament:
int n;
char s[101];
cin >> n;
cin.getline(s, 100);
cout << s;
Programul se așteaptă să citească un număr și un șir de caractere (cu spații). Dacă i-am da numărul și șirul:
2
Ana are mere
Nu se va afișează nimic. De ce? Pe scurt, după ce am citit numărul 2
, programul vrea să citească în continuare de pe prima linie, pe care se mai află doar caracterul newline
. Astfel, șirul s
citește nimic, după care ia caracterul newline
și doar după aceea trece la al doilea rând.
Pentru a repara problema, trebuie să sărim cumva peste caracterul newline
. Din fericire, funcția cin.get()
ia primul caracter și îl citește. Astfel, codul funcțional devine:
int n;
char s[101];
cin >> n;
cin.get(); //Pentru a sări peste caracterul newline
cin.getline(s, 100);
cout << s;