Documente Academic
Documente Profesional
Documente Cultură
1
Valeriu Iorga Programare în C / C++
3. Citirea cu format.
scanf( format, a1, a2, …, an)
Citeşte valorile de la intrarea standard în formatul precizat şi le plasează în variabilele cu adresele
a1, a2,….
Pentru o variabilă simplă sau înregistrare, adresa se obţine folosind operatorul @.
Sintaxa descriptorului de format este:
% [*] [ Lung ] [ l ] descriptor
Descriptorul indică conversia care se face:
d - întreg în baza 10
o - întreg în baza 8
x - întreg în baza 16
f - real
c - caracter
s - şir de caractere.
* indică faptul că valoarea citită nu se atribuie unei variabile.
Lung indică lungimea câmpului din care se face citirea. În lipsa lui citirea se opreşte la primul
caracter care nu face parte din număr.
L indică un întreg long sau un real double; h - indică un întreg short.
Funcţia scanf() furnizează numărul de câmpuri citite.
4. Citirea / scrierea la nivel de caracter.
Pentru realizarea operaţiilor de transfer între memorie şi fişierele standard se utilizează următoarele funcţii:
getch() - citeşte un caracter, fără ecou de la tastatură; funcţia returnează valoarea ASCII a
caracterului citit.
Apelul getch(); se foloseşte pentru a reţine fereastra de ieşire; dacă se introduce un caracter, se
trece în fereastra de editare.
getche() - are acelaşi efect cu funcţia getch(), cu deosebirea că citirea face cu ecou.
putch(expresie) - afişează pe ecran caracterul având codul ASCII egal cu valoarea expresiei;
funcţia returnează codul caracterului afişat.
Aceste funcţii au prototipurile declarate în fişierul <conio.h>. pentru a le folosi va trebui să
includem acest fişier în programul nostru folosind directiva include.
getchar() - nu este o funcţie ci o macroinstrucţiune. Are ca efect citirea cu ecou a unui caracter de
la terminalul standard. Caracterele introduse de la tastatură sunt puse într-o zonă tampon, până la
acţionarea tastei ENTER, moment în care în zona tampon se introduce caracterul rând nou.Fiecare apel
getchar() preia următorul caracter din zona tampon.
putchar(expresie) - este tot o macroinstrucţiune, care afişează caracterul având codul ASCII
egal cu valoarea expresiei parametru.
Macrourile getchar şi putchar sunt definite în fişierul <stdio.h>.
5. Citirea / scrierea unei linii.
gets(zona) - introduce de la terminalul standard un şir de caractere terminat prin acţionarea tastei
ENTER. Funcţia are ca parametru adresa zonei de memorie în care se introduc caracterele citite.
Funcţia returnează adresa de început a zonei de memorie (parametrul); la întâlnirea sfârşitului de fişier
(CTRL Z) funcţia returnează NUL.
2
Valeriu Iorga Programare în C / C++
puts(zona) – afişează la terminalul standard şirul de caractere din zona dată ca parametru, până la
caracterul NUL,care va fi înlocuit prin caracterul linie noua. Funcţia returnează codul ultimului caracter
din şirul de caractere afisate (-1 în caz de eroare).
Funcţiile gets() şi puts() au prototipurile în fişierul <stdio.h>.
3
Valeriu Iorga Programare în C / C++
În absenţa indicaţiilor de formatare, se face o formatare implicită, în baza 10, cu aliniere la dreapta
în câmpul de ieşire.
Pentru a realiza o formatare definită de utilizator, diferită de cea implicită, se pot seta biţii
membrului indicator cu funcţiile:
long setf(long f); // seteaza indicatorii, intoarce vechiul format
long setf(long b, long g);//seteaza bitul specificat din grupa
Biţii indicatorului de format se împart în 3 grupe:
1) aliniere (adjustfield) cu biţii right, left şi internal
2) bază (basefield) cu biţii dec, oct, hex
3) exponent (floatfield) cu biţii scientific şi fixed.
Într-o grupă poate fi setat un singur indicator.
int width(); // returneaza latimea zonei de afisare
int width(int w); // modifica la w, latimea zonei de afisare
Implicit, lăţimea minimă a zonei de afişare este 0; ea poate fi extinsă automat pentru a permite
afişarea datei cu toate cifrele.
Dacă numărul de caractere al datei este mai mic decât lăţimea minimă a zonei de afişare, se face
aliniere la dreapta, completată la stânga cu spaţii libere.
Caracterul de umplere (cu care se completează lăţimea minimă a zonei de afişare poate fi definit
prin:
char fill(); // intoarce codul caracterului de umplere curent
char fill(char c); //defineste un nou caracter de umplere
Numărul de zecimale cu care se afişează un număr real (precizia) poate fi setat cu:
int precision(); //intoarce precizia curenta
int precision(int n); // modifica precizia la n cifre,
// intoarce vechea precizie
Exemple:
int i=25;
cout.width(10);
cout.setf(ios::left,ios::adjustfield);
cout.fill(‘0’);
cout.setf(ios::showpos);
cout.setf(ios::hex,ios::basefield);
cout << i << endl;
double x=123.456;
cout.setf(ios::scientific,, ios::floatfield);
cout.precision(5);
cout << x << endl;
2. Manipulatori.
Permit definirea formatelor pentru operaţiile de intrare / ieşire, într-un mod mai simplu decât o fac
indicatorii de format.
Există următorii manipulatori:
dec – indicator de conversie zecimal
oct – indicator de conversie octal
hex – indicator de conversie hexazecimal
ws – setare salt peste spaţii albe
endl – inserează linie nouă şi goleşte tamponul fluxului
ends – inserează caracterul nul de terminare a unui şir de caractere
flush – goleşte tamponul fluxului
setbase(int n) - setează baza(n = 0, 8, 10, 16)
4
Valeriu Iorga Programare în C / C++
5
Valeriu Iorga Programare în C / C++