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.
- vector_de_caractere = vectorul în care vor fi memorate caracterele citite;
- 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);