Citește un șir de caractere cu spații în C++
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
).
Ce este cin.getline()?
Funcția cin.getline
ne ajută să citim un șir de caractere ce conține și
spații.
Sintaxa funcției cin.getline
Sintaxa ei este următoarea:
cin.getline(s, dimensiune);
Și înseamnă: Citește șiruls
până la caracterul newline
, șir ce conține
maximum dimensiune
caractere.
Exemplu
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.
Problemă cu citirea când folosim cin.getline()
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;
Alte resurse sau bibliografie
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0