Citire șir

Modaltăți de citire de la tastatură a unui șir de caractere 

Citirea vectorilor de caractere.

Citirea elementelor unui vector se poate realiza în trei moduri diferite:

  • ca o variabilă neindexată, precizând numele șirului în cadrul instrucțiunii cin
  • folosind comanda cin.get()
  • sau la fel ca citirea oricarui vector, element cu element, începand cu elementul aflat pe prima pozitie (pozitia 0) pana la marcatorul de sfârșit de sir('\0').
  • Exemplu:

char c, s[150];
int main (void)
{
 // Varianta 1:  

 cin >> s;
// varianta 2 

  cin.get();
  cin.get(s,100); 

//varianta 3

cin.getline(s,100);

return 0;
}

Explicaţii:

  • Varianta 1: Se vor citi toate caracterele până la întâlnirea primului spaţiu. După ultimul caracter se adaugă '\0'. Ex. Dacă se introduce de la tastatură şirul: "informatica este", după apăsarea tastei ENTER, şirul va conţine "informatica", lungimea acestui şir este 11 şi s[11] va fi egal cu '\0'.
  • Varianta 2: Şirul este citit cu ajutorul funcţiei cin.get() care are trei parametri:
    cin.get (vector_de_caractere, int nr, char c='\n') unde:
    • vector_de_caractere = vectorul în care vor fi memorate caracterele citite;
    • nr = numărul maxim de caractere care se vor citi;
    • c = caracterul care determină oprirea citirii.
  • Varianta 3: Şirul este citit cu ajutorul funcţiei cin.getline() care are aceia;i parametri ca si cin.get(), dar spre deosebire de aceasta nu mai trebuie eliberat bufferul de intrare dupa fiecre citire
  • Observații:
    - sunt citite şi caracterele albe (spaţiu, tab) - caracterul trimis ca al treilea parametru nu se adaugă la şir; - după ultimul caracter se adaugă automat '\0' - ultimul parametru este opţional, în cazul în care lipseşte se consideră că este '\n' 

Modul de funcţionare a funcţiei: Se citesc caractere de la tastatură până la apăsarea tastei ENTER.

  • Dacă numărul de caractere tastate este mai mic decât nr şi nu a fost întâlnit caracterul c (implicit '\n') atunci se vor memora toate caracterele.
  • Dacă numărul de caractere tastate este mai mare decât nr şi nu a fost întâlnit caracterul c printre primele nr-1 caractere, atunci se vor memora primele nr-1 caractere din cele tastate.
  • Dacă printre primele nr-1 caractere tastate se găseşte caracterul c atunci se vor memora doar caracterele introduse înaintea lui c. Funcţia cin.get() utilizează o zonă intermediară de memorie (buffer) astfel:
    • Se memorează în buffer caracterele care s-au tastat până la apăsarea tastei ENTER.
    • Se analizează pe rând primele nr-1 caractere (dacă există nr-1 caractere) din buffer testându-se dacă printre aceste caractere se află caracterul c. Dacă se întâlneşte caracterul c, atunci, toate caracterele tastate înaintea lui c vor fi adaugate şirului şi vor fi eliminate din buffer aceste caractere şi caracterul c din buffer.

    Din acest motiv, folosirea repetată a funcţiei cin.get () poate funcţiona eronat. Motivul este că, după executarea unei citiri, este posibil ca bufferul să nu se golească complet. Se va utiliza :
    cin.get (s1, 100);
    cin.get(); // se mai citeşte un caracter din buffer - cu scopul de a elimina acest caracter cin.get(s2, 100);
Morar Filip, clasa a XII-a A, Colegiul Național ”Ștefan cel Mare”, Suceava, Proiect pentru Examenul de Atestat Profesional, 2017
Creat cu Webnode
Creați un site gratuit! Acest site a fost realizat cu Webnode. Creați-vă propriul site gratuit chiar azi! Începeți