Funcţia printf .

Funcţia printf.

Funcţia printf este folosită pentru afişarea formatată a unui mesaj pe ecranul monitorului.
Ea are următoare structură:
printf(constanta_sir_de_caractere, lista_expresii);
Funcţia printf afişează pe ecranul monitorului constanta_sir_de_caractere în care toţi
descriptorii de format se în locuiesc cu valorile expresiilor, înlocuirea făcându-se de la stânga
spre dreapta.
Dăm un exemplu:
# include <stdio.h>
void main()
{
int n=10;
float x=5.71;
printf("Un nr. intreg: %d si un nr. real: %f\n",n,x);
}
În C, în momentul declarării variabilelor, ele pot fi şi iniţializate (aşa cum am procedat în
exemplul de mai sus pentru n şi x).
%d şi %f sunt specificatori (descriptori) de format pentru tipurile de date int şi respectiv
float. Descriptorii specifică faptul că în locul în care se află în şirul de caractere ce se afişează pe
ecran vor apărea valori de tipul indicat, valori ce vor fi luate din lista de expresii aflată după şirul
de caractere. În exemplul nostru lista de expresii este alcătuită din valorile n şi x.
Înlocuirea descriptorilor în constanta de tip şir de caractere (primul parametru al funcţiei
printf) se face de la stânga spre dreapta. În exemplul de mai sus %d va fi înlocuit cu valoarea
reţinută în variabila n, adică 10, iar %f se înlocuieşte cu valoarea lui x, adică 5.71.
Dacă tipurile expresiilor ce se înlocuiesc nu corespund cu descriptorii de format, sau dacă
numărul descriptorilor nu este egal cu cel al expresiilor ce se înlocuiesc, nu se semnalează
eroare, nici măcar atenţionare la compilare, dar afişarea va fi eronată!
Dăm în continuare lista cu descriptorii de format sau descriptorii de tip, cum se mai
numesc:
%c – caracter (char)
%s – şir de caractere încheiat cu caracterul ‘\0’ (string)
%d – întreg cu semn (int)
%u – întreg fără semn (unsigned int)
%ld – întreg lung (pe 4 octeţi) cu semn (long)
%lu – întreg lung (pe 4 octeţi) fără semn (unsigned long)
%x – întreg în baza 16 fără semn (int) (cifrele în hexazecimal pentru 10, 11, 12, 13, 14, 15
sunt litere mici, adică a, b, c, d, e şi f)
%X – la fel ca %x, numai ca cifrele în hexazecimal pentru sunt litere mari
%o – întreg în baza 8 fără semn (int)
%f – real pe 6 octeţi (float), notaţie zecimală (fără exponent)
%e – real pe 6 octeţi (float), notaţie exponenţială, ştiinţifică (litera e de la exponent este mică)
%E – la fel ca %e, numai că pentru litera de la exponent este mare
%g – real pe 6 octeţi (float), notaţie zecimală sau exponenţială, care este mai scurtă, iar dacă
se afişează exponenţial, atunci litera de la exponent este e

%G – real pe 6 octeţi (float), notaţie zecimală sau exponenţială, care este mai scurtă, iar dacă
se afişează exponenţial, atunci litera de la exponent este E
%lf – real pe 8 octeţi (double), notaţie zecimală
%le – real pe 8 octeţi (double), notaţie exponenţială (litera exponent e este mică)
%lE – la fel ca la %le, numai litera exponent E este mare
%lg – real pe 8 octeţi (double), notaţie zecimală sau exponenţială, care e mai scurtă, dacă e
cazul se foloseşte literă mică pentru exponent
%lG – real pe 8 octeţi (double), notaţie zecimală sau exponenţială, care e mai scurtă, dacă e
cazul se foloseşte literă mare pentru exponent
%Lf – real pe 10 octeţi (long double), notaţie zecimală
%Le – real pe 10 octeţi (long double), notaţie exponenţială (litera de la exponent este mică,
adică e)
%LE – real pe 10 octeţi (long double), notaţie exponenţială (litera de la exponent este mare,
adică E)
%Lg – real pe 10 octeţi (long double), notaţie zecimală sau exponenţială, care este mai scurtă,
literă mică pentru exponent
%LG – real pe 10 octeţi (long double), notaţie zecimală sau exponenţială, care este mai scurtă,
literă mare pentru exponent
%p – adresa în hexazecimal (pentru pointeri).
La afişarea folosind funcţia printf se pot face formatări suplimentare, pornind de la un
descriptor elementar. Formatările se referă la numărul de caractere pe care se face afişarea unei
valori, tipul alinierii, caracterele ce se completează în locurile libere (spaţii, zerouri) etc. Dăm în
acest sens câteva exemple:
%50s realizează afişarea unui string pe 50 caractere cu aliniere la dreapta, iar %-50s face
acelaşi lucru, dar cu aliniere la stânga. De obicei string-urile se aliniază la stânga.
%4d realizează afişarea unui număr întreg pe 4 caractere cu aliniere la dreapta, iar %-4d
face acelaşi lucru, dar cu liniere la stânga. De obicei valorile numerice se aliniază la dreapta.
%10.2f realizează afişarea unui număr real pe 10 caractere cu 2 cifre exacte după virgulă,
cu aliniere la dreapta, iar %-10.2f face acelaşi lucru, dar cu aliniere la stânga.
%010.2f realizează afişarea unui număr real pe 10 caractere cu 2 cifre exacte după
virgulă, cu aliniere la dreapta, iar spaţiile goale (din faţa numărului) se completează cu zerouri.
De exemplu, numărul 1.4 se va afişa sub forma 0000001.40. Dacă nu se pune 0 în faţa lui 10.2f,
atunci în loc de zerouri se completează implicit spaţii.
În programul de mai sus (afişarea unui întreg şi a unui număr real), după afişarea pe ecran
a mesajului, se sare la începutul liniei următoare, deoarece şirul s-a încheiat cu \n. Combinaţia de
caractere \n este una dintre aşa numitele secvenţe escape.
Lista secvenţelor escape recunoscute de limbajul C este:
\n – salt la linie nouă (nu neapărat la începutul lui)
\r – salt la început de rând
\t – deplasare la dreapta (tab)
\b – deplasare la stânga cu un caracter (backspace)
\f – trecere pe linia următoare (formfeed)
\’ – apostrof
\” – ghilimele
\\ – backslash

\xcc – afişarea unui caracter având codul ASCII în hexazecimal dat de cele două cifre de
după \x (fiecare c reprezintă o cifră în baza 16). De exemplu, \x4A este caracterul cu codul ASCII
4A(16) = 74(10), adică litera J.
Este bine de reţinut faptul că într-un şir constant de caractere, semnul \ (backslash)
trebuie dublat. Asta se întâmplă mai ales când este vorba de căi de fişiere. De asemenea, semnele
“ (ghilimele) şi ‘ (apostrof) trebuiesc precedate de semnul \ (backslash).
În C pentru a trimite un mesaj în fluxul standard de erori stderror folosim funcţia perror,
în loc de printf. Mesajul de eroare ajunge tot pe ecranul monitorului, dar pe altă cale. Datorită
faptului că funcţia perror nu suportă formatare aşa cum face printf, în exemplele pe care o să le
dăm în această carte vom folosi funcţia printf pentru afişarea mesajelor de eroare.

1 comentarii:

Anonim spunea...

foarte de ajutor B)

Trimiteți un comentariu