Sunteți pe pagina 1din 6

Fundamentele programării – Curs 5

Funcția „printf”

„f” vine de la format. „Printf” reprezentâ nd o funcție de tipă rire formatată pe ecran.
#include <stdio.h>
Funcția printf este o funcție standard a limbajului C cu numă r variabil de argumente. O funcție
cu listă variabilă de argumente trebuie să aibă cel puțin un parametru. Ca și antet funcția printf
are un parametru const char* și urmează 3 puncte.
printf(const char,...);
Parametrul obligatoriu (primul) conține textul ce se afișează pe ecran, adică un string NULL-
terminat.
În interiorul acestui text pot să apară descriptori de tip. Aceștia sunt înlocuiți la afișare cu
valorile urmă torilor parametrii ai funcției printf, de asemenea în interiorul textului pot apă rea și
secvențe escape.
ex:
int n=1;
float x=1.7f;
printf(“un întreg: %d,n\un real: %f.\n”,n,x);
„\n” =secvență escape
Descriptorii de tip se înlocuiesc de la stâ nga la dreapta în ordinea întlnirii lor cu valorile
parametrilor începâ nd cu al doilea: în loc de primul descriptor de tip se pune valoarea celui de-
al doilea parametru, al doilea descriptor se înlocuiește cu al doilea parametru, etc.
Trebuie avut grijă
1. Nr. descriptorilor de tip să fie egal cu nr. de parametrii ce urmează după primul.
2. Fiecare descriptor de tip să fie de același tip de date cu al valorii parametrului ce înlocuiește.
Dacă nu se respectă aceste reguli nu este semnalată eroare le compilare (nici măcar warning), în
schimb afișarea poate fi defectuoasă rezultâ nd chiar o eroare fatală , întrerupâ nd execuția.
Un descriptor de tip începe cu caracterul „%” și este urmat de unul sau mai multe caractere ce
dau tipul de date și eventual informații cu privire la formatarea afișă rii valorii respective.
În exemplul de mai sus „%d” este un descriptor de tip pentru afișarea unui nr. întreg în baza 10.
(d - decimal).
„%f” este un descriptor de tip pentru o faloare de tip float.
%7d – un întreg în baza 10 pe 7 caractere cu aliniere la dreapta
Între semnul „%” și literele tipului de date pot apă rea informații de formatare la afișare.

Cele 6 caractere suplimentare introduse o dată cu afișarea sunt spații.


Fundamentele programării – Curs 5

%-5d = un nr. întreg pe 5 caractere cu aliniere la stâ nga, caracterele suplimentare sunt spații.

%7.2f = se afișează un nr. real de tip float pe 7 caractere cu 2 cifre exacte după virgulă și aliniat
la dreapta
%-7.2f = aceeași afișare numai cu aliniere la stâ nga

1 . 7 0

%07.2f = Ca și în primul exemplu numai că în luc de spații se pun zerouri.

0 0 0 1 . 7 0

%0.2f

1 . 7 0

%-20s = afișarea unui string pe 20 caractere cu aliniere la stâ nga

%c - afișarea unui caracter ASCII


%s – afișarea unui string NULL-terminat
Pentru întregi
%d – afișarea unui întreg în baza 10
%u – afișarea unsigned int
%ld – long în baza 10
%ln – unsigned long în baza 10
%o – int în baza 8
%x – int în baza 16 scris cu litere mici
%X – int în baza 16 scris cu litere mari
Pentru reale
%f – float fă ră exponent
%e – float cu exponent mic (e)
%E – float cu exponent mare (E)
%g – float (scrierea mai scută dintre cu exponent și cu exponent) (e)
%G – float (scrierea mai scută dintre cu exponent și cu exponent) (E)

%lf – double fă ră exponent


Fundamentele programării – Curs 5

%le – double cu exponent mic (e)


%lE – double cu exponent mare (E)
%lg – double (scrierea mai scută dintre cu exponent și cu exponent) (e)
%lG – double (scrierea mai scută dintre cu exponent și cu exponent) (E)
%Lf
%Le ------- long double
%LE
%Lg
%LG

%p – pointer (Se afișeazp o adresă de memorie, adică un nr. întreg în baza 16)

Descriptori de tip
Secvențe „escape”
În exemplul de mai sus am folosit de 2 ori secvența escape „\n”, care introduce în string practic
caracterul cu codul ASCII 13, care la afișare are efectul de a se trece la linie nouă . („n – new
line”)
Lista secvențelor escape acciptate în inetriorul stringurilor este: \n, \r, \t, \b
\r = se introduce caracterul cu codul ASCII 10 și are ca efect revenirea la începutul liniei.
\t = se inserează un caracter TAB
\b = backspace, are ca efect mutarea cursorului cu o poziție la stâ nga fă ră a șterge caracterul
\f = („form feed”) se introduce un caracter care are ca efect trecerea pe linie nouă atunci câ nd
folosim o imprimantă
\` se afișeacă
\”
\\ = („backslash”) această secvență escape este folosită mai ales atunci câ nd specifică m căi
windows
%xcc = se afizează caracterul avâ nd codul ASCII în baza 16 dat după x.
Ex:
%x4A va apă rea j
printf(”Un test \r14\b ”);
Un test
1__test
Fundamentele programării – Curs 5

Funcția scanf

Ca și printf este o funcție standard (din stdio.h) cu listă variabilă de argumente folosită pentru
citire de la tastatură a unor valori.
scanf(const char*, ...);
Primul parametru al funcției scanf este tot un string NULL-terminat care trebuie să conțină
numai descriptori de tip fă ră formată ri sau alte caractere, adică este o listă numai cu decriptori.
Dacă se introduc alte caractere decâ t cele pentru descriptori nu pbținem eroare la compilare ci
execuția este defectuoasă . Nr. descriptorilor de tip trebuie să fie egal cu nr. parametrilor de
după primul. De asemenea tipurile descriptorilor trebuie să fie compatibile cu cele ale valorilor
citite de la tastatură și depuse în parametrii de după primul.
ex:
int n;
float f;
printf(“dati un int și un float:\n”);
scanf(“%d%f”,&n,&f);
În exemplul de mai sus „%d” înseamnă un descriptor de tip int => variabile n trebuie să fie de
tip int.
%f înseamnă descriptor pentru float, ceea ce înseamnă că variabila corespunză toare „f” trebuie
să fie de tip float.
&var
„&” este un operator unar care pus în fața unei variabile returnează adresa de memorie alocată
pentru variabila „var”.
La apelul funcției scanf se întâ lnește prima dată descriptorul „%d”. De la tastatură se preiau
primele caractere pâ nă la întâ lnirea lui spațiu, tab sau enter.
Conform lui „%d” , aceste caractere trebuie să reprezinte forma text a unui nr. întreg în baza 10.
În consecință caracterele se convertesc la un nr. întreg la un nr. întreg pe 4 octeți și se depun la
adresa dată de al doilea parametru, adică se depun la adresa lui „n”.
Același lucru se întâ mplă pentru urmă toarele caractere întâ lnite pâ nă la spațiu, tab sau enter.
Acestea sunt convertite la float și valoarea obținută este depusă la adresa variabilei „f”.
| | | | | =n
&n
| | | | | =f
&f

11732 1.25\n
Fundamentele programării – Curs 5

Este important de reținut că spațiu, tab și enter sunt delimitatori de tokeni citiți de la tastatură .

ex:
for(unsigned char c=0; c<256;c++)
printf(“%c %d\n”,c,c);

A 65
Se face ciclu infinit deoarece după 256 vine 0.

for(unsigned int c=0; c<256;c++)


printf(“%c %d\n”,c,c);

Fluxuri std. C
Stdout = fluxul standard de ieșire (ecran) o
Stdin = fluxul standard de ieșire (tastatura) i
Stderr = Fluxul standard pentru erori o
Mesajele trimise în fluxul standard de erori ajung tot pe ecran dar printr-un altă cale. io
Std aux = fluxul standard COM1 io
Str prn = fluxul standard paralel LPT1 io

Pentru a trimite un text într-un flux de ieșire un text avem funcția fprintf care are 2 parametri
obligatorii: fluxul și stringul.
fprintf(flux,str,...);
Funcția fprintf este asemă nă toare cu printf cu deosebirea că mesajul din al doilea parametru
ajunge în fluxul dat în primul parametru.
fprintf(stdout,“Un int %d”,n);
fprintf(stderr,“Un int %d”,n);
Ajunge pe ecran prin fluxul de erori.
fprintf(stdaux,“Un int %d”,n);
fprintf(stdprn,“Un int %d”,n);

fscanf(flux,str,…);
Fundamentele programării – Curs 5

Funcția este similară cu scanf numai că preluarea datelor în modul text este făcută de fluxul dat
de primul parametru. Primul parametru poate fi:
stdin ------ tastatura
stdaux
stdprn

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