Sunteți pe pagina 1din 18

Programarea calculatoarelor si limbaje

de programare I
Familiile de funcții printf() și scanf()

Funcţiile scanf şi printf permit citirea cu format şi


respectiv scrierea cu format pentru orice tip de date.
Antetul şi descrierea acestor funcţii sunt:

Functia printf()
printf ( format, arg1, arg2, ... );

 Afişează pe ecran valorile expresiilor din lista


argumentelor, conform formatului specificat;
 Argumentele pot fi constante, variabile, expresii
 Dacă nu apare nici un argument, pe ecran se tipăresc
doar caracterele din şirul format.
 Formatul este un şir de caractere care trebuie să
includă câte un descriptor de format pentru fiecare
din argumente.
 Caracterele din format care nu fac parte din
descriptori se tipăresc pe ecran.

Si in cazul acestei functii, specificatorii de format
sunt cea mai importanta componenta a liniei de cod
deoarece definesc tipul si interpretarea parametrilor
respectivi.

Specificatori:
- d sau i: un numar sau o zecimala de tip int.
- u: un numar intreg de tip unsigned
- o: un numar octal de tip unsigned
- x: un numar hexadecimal de tip int
- f: un numar rational
- e: numarul 3.9265e+2
- g: cea mai scurta reprezentare a %e sau %f
- c: caracter
- s: sir de caractere
- p: adresa de pointer
Specificatorii de formatare pot contine si
subspecificatori: flags, width, precision, modificatori, (in
aceasta ordine).
Subspecificatori *flags:
- „-”: aliniere la stanga deoarece initial este la
dreapta(vezi width).
- „+”: forteaza afisarea semnului numarului afisat.
- „#”: pentru numerele in baza 10 forteaza aparitia
virgulei chiar daca nu sunt cifre dupa aceasta.
- „0”: inlocuieste spatiile de la alinierea la dreapta cu 0-
uri(vezi width) *width:
- (numar): se va afisa un minim de caractere. Daca
numarul afisat e mai scurt decat acest minim se va crea
spatiere. *.precision:
-„.numar”: forteaza sa se afiseze un anume numar de
zecimale
Familia de functii printf() este alcatuita din: printf(),
vprintf(), fprintf(), vfprintf(), dprintf(), vdprintf(), sprint(),
snprintf(), vsprintf(), vsnprintf(), asprintf(), vasprintf() )
va trimite un semnal de iesire de diverse tipuri.

fprintf (FILE * stream, format const char *, ...); ~


dprintf()-la un descriptor de fișier fd în loc de un flux
stdio.
Scrieți datele formatate în flux
Scrie șirul C indicat de format în flux. Dacă formatul
include specificatorii de format (subsecvențele care încep
cu%), argumentele suplimentare care urmează formatul
sunt formatate și introduse în șirul rezultat înlocuind
specificații respectivi.
După parametrul format, funcția așteaptă cel puțin la
fel de multe argumente suplimentare specificate de
format.
snprintf (char * s, size_t n, format const char *, ...);
Scrieți ieșirea formatată într-un tampon de
dimensiuni
Compune o șir cu același text care ar fi tipărit dacă s-
ar folosi formatul pe printf, dar în loc să fie tipărit,
conținutul este stocat ca un șir C în bufferul indicat de s
(luând n ca capacitate maximă de memorare a
tamponului).
Dacă șirul rezultat ar fi mai lung decât n-1 caractere,
celelalte caractere sunt aruncate și nu sunt stocate, dar
contabilizate pentru valoarea returnată de funcție.
Un caracter nul de încheiere este automat adăugat
după conținutul scris.
După parametrul format, funcția așteaptă cel puțin la
fel de multe argumente suplimentare necesare pentru
format.

sprintf (char * str, const char * format, ...);~ asprintf()-


se aloca un șir suficient de mare pentru a reține ieșirea
inclusiv octetul nul de încheiere și întoarceți-l un pointer
prin intermediul primului argument.
Scrieți date formatate pe șir
Compune o șir cu același text care ar fi tipărit dacă s-
ar utiliza formatul pe printf, dar în loc să fie tipărit,
conținutul este stocat ca un șir C în bufferul indicat de str.
Dimensiunea tamponului trebuie să fie suficient de
mare pentru a conține întregul șir rezultat (a se vedea
snprintf pentru o versiune mai sigură).
Un caracter nul de încheiere este automat adăugat
după conținut.
După parametrul format, funcția așteaptă cel puțin la
fel de multe argumente suplimentare necesare pentru
format.
vfprintf (FILE * stream, format const char *, va_list
arg);
~vdprintf()-la un descriptor de fișier fd în loc de un flux
stdio.
Scrieți datele formatate din lista de argumente
variabile în flux
Scrie șirul C indicat de format în flux, înlocuind
orice format specificator în același mod ca printf, dar
folosind elementele din lista de argumente variabile
identificate de arg în loc de argumente funcționale
suplimentare.

Intern, funcția preia argumente din lista identificată


de arg ca și cum va fi folosit va_arg pe ea, și astfel starea
de arg este probabil modificată de apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat să
fie lansat de va_end la un moment dat după apel.

vprintf ( const char * format, va_list arg )


Tipăriți date formatate din lista de argumente
variabile în stdout.
Scrie șirul C indicat de format la ieșirea standard
(stdout), înlocuind orice specificator de format în același
mod ca și printf, dar folosind elementele din lista de
argumente variabile identificate de arg în loc de
argumente funcționale suplimentare.
Intern, funcția preia argumente din lista identificată
de arg ca și cum va fi folosit va_arg pe ea, și astfel starea
de arg este probabil modificată de apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat să
fie lansat de va_end la un moment dat după apel.
vsnprintf (char * s, size_t n, const char * format,
va_list arg);
Scrieți date formatate dintr-o listă de argumente
variabile într-un tampon de dimensiuni
Compune o șir cu același text care ar fi tipărit dacă s-
ar utiliza formatul pe printf, dar folosind elementele din
lista de argumente variabile identificate de arg în loc de
argumente funcționale suplimentare și stocarea
conținutului rezultat ca un șir C în bufferul indicat de s
(luând n ca capacitate maximă de umplere a tamponului).
Dacă șirul rezultat ar fi mai lung decât n-1 caractere,
celelalte caractere sunt aruncate și nu sunt stocate, dar
contabilizate pentru valoarea returnată de funcție.
Intern, funcția preia argumente din lista identificată
de arg ca și cum va fi folosit va_arg pe ea, și astfel starea
de arg este probabil să fie modificată de apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat să
fie lansat de va_end la un moment dat după apel.

vsprintf (char * s, format const char *, va_list arg);


Scrieți date formatate din lista de argumente
variabile în șir
Compune o șir cu același text care ar fi tipărit dacă s-
ar utiliza formatul pe printf, dar folosind elementele din
lista de argumente variabile identificate de arg în loc de
argumente funcționale suplimentare și stocarea
conținutului rezultat ca un șir C în bufferul indicat de s .
Intern, funcția preia argumente din lista identificată
de arg ca și cum va fi folosit va_arg pe ea, și astfel starea
de arg este probabil să fie modificată de apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat să
fie lansat de va_end la un moment dat după apel.

Functia scanf()
int scanf ( format, adr1, adr2, ... );
 Citeşte caracterele introduse de la tastatură, pe care le
interpretează conform specificatorilor din format,
memorând valorile citite la adresele transmise ca
parametri.
 Formatul este un şir de caractere care trebuie să
includă câte un descriptor de format pentru fiecare
dintre valorile citite.
 Adresele sunt pointeri sau adresele variabilelor ale
căror valori se citesc;
 Adresa unei variabile se obţine folosind operatorul de
adresare &, astfel: &nume_variabila
 Valorile întregi sau reale consecutive introduse de la
tastatură trebuie separate de cel puţin un spaţiu (enter,
spaţiu, tab);
Specificatorii de format cel mai des folositi sunt:
- %c pentru introducerea de caractere
- %d pentru introducerea numerelor intregi
- %f pentru introducerea numerelor rationale
- %s pentru introducerea unui sir
- %u pentru introducerea unui character de tip unsigned
- %x pentru caracterele de tip Hexadecimal Pe langa
acestia mai sunt si:
- * acesta implica faptul ca urmatoarea conversie este
obisnuita si nu se foloseste pointer.
- hh urmatorul pointer va fi in char
- h urmatorul pointer va fi in SHORT int
- l daca pointerul este de natura a e f sau g va fi
convertit in double iar daca e de forma c sau s va fi un sir.
- L urmatorul pointer va fi in long double
- j urmatorul pointer va fi in intmax.
- q urmatorul pointer va fi in long long, int.

Familia de functii scanf() este alcatuita din: fscanf,


scanf, sscanf, vfscanf, vscanf, vsscanf.

fscanf ( restricționează fluxul, const char *


restricționează formatul, ...);
Citește datele din flux și le stochează în
conformitate cu formatul parametrilor în locațiile
punctate de argumentele suplimentare.
Argumentele suplimentare ar trebui să indice
obiectele deja alocate de tipul specificat de
specificatorul lor de format corespunzător în șirul
formatului.

sscanf ( const char * s, const char * format, ...);


Citiți datele formatate din șir
Citește datele din s și le stochează conform
formatului parametrilor în locațiile date de argumentele
suplimentare, ca și cum s-ar folosi scanf, dar citind din s
în loc de intrarea standard (stdin).
Argumentele suplimentare ar trebui să indice
obiectele deja alocate de tipul specificat de specificatorul
lor de format corespunzător în șirul formatului.
La succes, funcția returnează numărul de elemente din
lista de argumente completate cu succes. Acest număr
poate corespunde numărului preconizat de articole sau
poate fi mai mic (chiar zero) în cazul unei eșecuri de
potrivire.

vfscanf (FILE * restricționează fluxul, const char *


restricționează formatul, va_list arg);
Citiți datele formatate din flux în lista de
argumente variabile
Citește datele din flux și le stochează conform
formatului parametrilor în locațiile punctate de
elementele din lista de argumente variabile identificate
de arg.
Intern, funcția preia argumente din lista
identificată de arg ca și cum va fi folosit va_arg pe ea,
și astfel starea de arg este probabil să fie modificată de
apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat
să fie lansat de va_end la un moment dat după apel.

vscanf (format const * char, va_list arg);


Citiți datele formatate în lista de argumente
variabile
Citește datele de la intrarea standard (stdin) și le
stochează conform formatului parametrilor în locațiile
punctate de elementele din lista de argumente variabile
identificate de arg.
Intern, funcția preia argumente din lista
identificată de arg ca și cum va fi folosit va_arg pe ea,
și astfel starea de arg este probabil să fie modificată de
apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat
să fie lansat de va_end la un moment dat după apel.

vsscanf (const char * s, format const char *, va_list


arg);
Citiți datele formatate din șir în lista de argumente
variabile
Citește datele din s și le stochează conform
formatului parametrilor în locațiile punctate de
elementele din lista de argumente variabile identificate
de arg.
Intern, funcția preia argumente din lista
identificată de arg ca și cum va fi folosit va_arg pe ea,
și astfel starea de arg este probabil să fie modificată de
apel.
În orice caz, arg ar fi trebuit inițializat de către
va_start la un moment înainte de apel și este de așteptat
să fie lansat de va_end la un moment dat după apel.
Bibliografie

http://www.cplusplus.com/
http://www.manpagez.com/man/3/printf/
http://www.manpagez.com/man/3/scanf/

S-ar putea să vă placă și