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

Autentifică-te pentru a putea comenta.

Autentifică-te