2.5. Functia printf

2019/01/02 in Programare in C

Functia printf poate fi folosita pentru a afisa date pe ecranul terminalului standard sub controlul unor formate. Ea poate fi apelata printr-o constructie de forma:

printf(control, par1, par2,..., parn);

unde:

control - Este un sir de caractere care defineste textele si formatele datelor care se scriu;
par1, par2,..., parn - Sunt expresii;
- Valorile lor se scriu conform specificatorilor de format prezenti in parametrul de control.

Datele gestionate prin printf sunt supuse unor transformari, din cauza ca datele au un format intern si unul extern.

Parametrul control al functiei printf defineste aceste transformari ale datelor care se afiseaza pe ecran. Ele se numesc conversii. Parametrul control contine asa numitii specificatori de format care definesc conversiile datelor din format intern in format extern. In afara de specificatorii de format, parametrul control contine succesiuni de caractere care se afiseaza ca atare in pozitii corespunzatoare.

In concluzie, parametrul control are in compunerea sa:

Aceste constructii nu sunt intotdeauna ambele prezente. Daca dorim sa se afiseze un text, atunci parametrul control nu contine specificatori de format, ci doar textul respectiv, iar parametrii par1, par2,..., parn sunt absenti. In mod analog, parametrul control poate sa contina numai specificatori de format.

Exemplu:

Apelul functiei puts din exemplul 2.6.:

puts("\nPentru a termina programul actionati o tasta");

poate fi inlocuit printr-un apel al functiei printf care contine numai parametrul de control fara specificatori de format:

printf("\nPentru a termina programul actionati o tasta\n");

In acest caz s-a folosit caracterul newline de la sfarsitul sirului de caractere pentru ca dupa afisarea textului sa se treaca la linia urmatoare, fapt ce se realizeaza automat in cazul functiei puts.

Specificatorii de format, daca exista, se corespund cu parametrii par1, par2,..., parn. Astfel, al k-lea specificator de format controleaza afisarea valorii parametrului park.

Formatul extern al unei date consta intr-o succesiune de caractere imprimabile. Ele se afiseaza intr-o zona numita camp.

Un specificator de format incepe cu un caracter procent (%). In continuare, mai pot exista caracterele indicate in tabelul urmator:

un caracter minus optional - Datele se cadreaza implicit in dreapta campului in care se scriu. Daca este prezent caracterul minus, atunci data corespunzatoare lui este cadrata la dreapta.
un sir de cifre zecimale optional - Defineste dimensiunea minima a campului in care se afiseaza caracterele care intra in compunerea formatului extern al datei.
- In cazul in care data necesita un camp de dimensiune mai mare decat cel precizat, ea se va scrie pe atatea caractere cate ii sunt necesare.
- In cazul in care data necesita un camp mai mic decat cel definit in specificatorul de format, ea se va scrie in campul respectiv in dreapta sau in stanga, daca este prezent caracterul minus in specificatorul de format corespunzator, iar campul se completeaza cu caractere nesemnificative (implicit ele sunt spatii; in cazul in care numarul ce indica dimensiunea minima incepe cu un 0 nesemnificativ, vor fi zerouri. Aici zeroul nesemnificativ nu inseamna ca numarul este in octal, deoarece acest sir de cifre nu reprezinta o constanta intreaga, ci dimensiunea minima a campului).
un punct optional, urmat de un sir de cifre zecimale - Defineste precizia datei care se scrie sub controlul specificatorului respectiv. Daca punctul este prezent, atunci si precizia este prezenta. In cazul in care data este flotanta, precizia defineste numarul de zecimale care se scriu. In cazul in care data este un sir de caractere, precizia indica numarul de caractere care se scriu.
una sau doua litere - Definesc tipul de conversie aplicat datei care se scrie.

Din cele de mai sus, rezulta ca un specificator de format incepe cu un carcter % si se termina cu o litera.

Intre % si litera care sfarseste un specificator de format mai pot aparea si alte caractere a caror interpretare s-a dat mai sus.

In cazul in care dupa caracterul % urmeaza un caracter diferit de cele folosite la definirea specificatorului de format, caracterul procent respectiv se ignora si se afiseaza caracterul care urmeaza dupa el. Aceasta regula permite afisarea insusi a caracterului procent. Astfel, succesiunea %% nu reprezinta un specificator de format, primul caracter procent se ignora, iar cel de-al doilea se va afisa la terminal.

Functia printf returneaza numarul de octeti (caractere) care se afiseaza la terminal sau -1 la eroare.

Prototipul functiei printf se afla in fisierul stdio.h.

In continuare vom indica principalele conversii realizate prin specificatorii de format, definite de literele de la sfarsitul specificatorilor de format.

2.5.1. Functia printf - Litera c