Scriere cu format
Nume
printf fprintf sprintf - scriere cu format
Declaratie
int printf(const char *format, );
int fprintf(FILE *flux, const char
*format, );
int sprintf(char *str, const char *format,
);
Descriere
Functiile din familia printf genereaza o iesire in concordanta cu format dupa cum se descrie mai jos. Functia printf afiseaza iesirea la fluxul standard stdout fprintf scrie iesirea la flux sprintf scrie iesirea in sirul de caractere str
Aceste functii genereaza iesirea sub controlul sirului format care specifica cum se convertesc argumentele pentru iesire.
Sirul de formatare
Sirul format este un sir de caractere, printre care se pot afla zero sau mai 717g67h multe directive: caractere obisnuite (diferite de ) care sint copiate asa cum sint in fluxul de iesire, si specificatii de conversie, fiecare dintre ele rezultind din incarcarea a zero sau mai multe argumente. Fiecare specificatie de conversie este introdusa de caracterul si se termina cu un specificator de conversie. Intre acestea pot fi (in aceasta ordine) zero sau mai multi indicatori, o marime minima a cimpului optionala, o precizie optionala si un modificator optional de lungime.
Argumentele trebuie sa corespunda in ordine cu specificatorii de conversie. Acestea sint folosite in ordinea data, unde fiecare caracter si fiecare specificator de conversie solicita urmatorul argument. Daca argumentele nu sint suficiente comportamentul programului este imprevizibil.
Caractere indicatori
Caracterul este urmat de zero, unul sau mai multi indicatori:
Valoarea numerica se converteste in format alternativ. Pentru conversii de tip o, primul caracter al sirului de iesire este zero (prin prefixare cu daca valoarea nu este zero). Pentru conversii de tip x si X, o valoare nenula este prefixata cu 0x (sau 0X pentru conversii de tip X). Pentru conversii de tip e E f F g si G, rezultatul va contine intotdeauna punctul zecimal, chiar daca nu apare partea fractionara (in mod normal punctul zecimal apare in aceste conversii numai daca exista si partea fractionara). Pentru conversii de tip g si G zerourile finale nu sint eliminate asa cum se procedeaza in mod normal. Pentru alte conversii rezultatul este nedefinit.
Valoarea numerica este convertita cu zerouri la stinga. Pentru conversii de tip d i o u x X e E f F g si G, valoarea convertita este completata cu zerouri la stinga in loc de blanc. Daca apar indicatorii si impreuna, indicatorul este ignorat. Daca pentru o conversie numerica (d i o u x X) este data o precizie, indicatorul este ignorat. Pentru alte conversii rezultatul este nedefinit.
Valoarea convertita este aliniata la stinga (implicit alinierea se face la dreapta). Cu exceptia conversiilor de tip n, valoarea convertita este completata la dreapta cu blanc, in loc sa fie completata la stinga cu blanc sau zero. Daca apar indicatorii si impreuna, indicatorul este ignorat.
Sp (spatiu) In cazul unui rezultat al unei conversii cu semn, inaintea unui numar pozitiv sau sir vid se pune un blanc.
Semnul ( sau ) este plasat inaintea numarului generat de o conversie cu semn. Implicit semnul este folosit numai pentru numere negative. Daca apar indicatorii si Sp impreuna, indicatorul Sp este ignorat.
Latimea cimpului
Un sir de cifre zecimale (cu prima cifra nenula) specifica o latime minima pentru cimp. Daca valoarea convertita are mai putine caractere decit latimea specificata, va fi completata cu spatii la stinga (sau dreapta, daca s-a specificat aliniere la stinga). In locul unui numar zecimal se poate folosi pentru a specifica faptul ca latimea cimpului este data de argumentul urmator, care trebuie sa fie de tip int. O valoare negativa pentru latime este considerata un indicator urmat de o valoare pozitiva pentru latime. In nici un caz nu se va trunchia cimpul; daca rezultatul conversiei este mai mare decit latimea cimpului, cimpul este expandat pentru a contine rezultatul conversiei.
Precizia
Precizia (optionala) este data de caracterul . urmat de un sir de cifre zecimale. In locul sirului de cifre zecimale se poate scrie pentru a specifica faptul ca precizia este data de argumentul urmator, care trebuie sa fie de tip int. Daca precizia este data doar de ., sau daca precizia este negativa, atunci aceasta se considera zero. Precizia da numarul minim de cifre care apar pentru conversii de tip d i o u x X, numarul de cifre care apar dupa punctul zecimal pentru conversii de tip e E f F, numarul maxim de cifre semnificative pentru conversii de tip g si G, sau numarul maxim de caractere generate pentru conversii de tip s
Modificator de lungime
In acest caz prin conversie intreaga intelegem conversie de tip d i o u x X
h Conversia intreaga care urmeaza corespunde unui argument short sau unsigned short, sau urmatoarea conversie de tip n corespunde unui argument de tip pointer la short
l Conversia intreaga care urmeaza corespunde unui argument long sau unsigned long, sau urmatoarea conversie de tip n corespunde unui argument de tip pointer la long
L Urmatoarea conversie de tip e E f g sau G corespunde unui argument long double
Specificator de conversie
Un caracter care specifica tipul conversiei care se va face. Specificatorii de conversie si semnificatia lor sint:
d i
Argumentul de tip int este convertit la notatia zecimala cu semn. Precizia, daca este data, da numarul minim de cifre care trebuie sa apara; daca valoarea convertita necesita mai putine cifre, aceasta este completata la stinga cu zerouri. Precizia implicita este 1. Daca valoarea 0 este afisata cu precizie explicita 0, iesirea este vida.
o u x X
Argumentul de tip unsigned este convertit la notatie octala fara semn (o), zecimala fara semn (u), sau hexazecimala fara semn (x si X). Literele abcdef se folosesc pentru conversii de tip x; literele ABCDEF pentru conversii de tip X. Precizia, daca este data, da numarul minim de cifre care trebuie sa apara; daca valoarea convertita necesita mai putine cifre, aceasta este completata la stinga cu zerouri. Precizia implicita este 1. Daca valoarea 0 este afisata cu precizie explicita 0, iesirea este vida.
e E
Argumentul de tip flotant este rotunjit si convertit in stil [ ]d.ddde±dd unde avem o cifra inainte de punctul zecimal si numarul de cifre dupa acesta este egal cu precizia; daca aceasta lipseste se considera 6; daca precizia este zero, punctul zecimal nu apare. O conversie de tip E foloseste litera E (in loc de e) pentru a introduce exponentul. Exponentul are intotdeauna cel putin doua cifre; daca valoarea este zero, exponentul este
f F
Argumentul de tip flotant este rotunjit si convertit in notatie zecimala in stil [ ]ddd.ddd, unde numarul de cifre dupa punctul zecimal este egal cu precizia specificata. Daca precizia lipseste se considera 6; daca precizia este explicit zero, punctul zecimal nu apare. Daca punctul zecimal apare, cel putin o cifra apare inaintea acestuia.
g G
Argumentul de tip flotant este convertit in stil f sau e (sau E pentru conversii de tip G). Precizia specifica numarul de cifre semnificative. Daca precizia lipseste se considera 6; daca precizia este zero se considera 1. Stilul e este folosit daca exponentul rezultat in urma conversiei este mai mic decit 4 ori mai mare sau egal cu precizia. Zerourile finale sint eliminate din partea fractionara a rezultatului; punctul zecimal apare numai daca este urmat de cel putin o cifra.
c Argumentul de tip int este convertit la unsigned char si se scrie caracterul rezultat.
s Argumentul de tip const char este un pointer la un sir de caractere. Caracterele din sir sint scrise pina la (fara a include) caracterul terminator null; daca precizia este specificata, nu se scrie un numar mai mare decit cel specificat. Daca precizia este data, nu e nevoie de caracterul null; daca precizia nu este specificata, sau daca este mai mare decit marimea sirului, sirul trebuie sa contina un caracter terminator null.
p Argumentul de tip pointer este scris in hexazecimal; formatul este specific sistemului de calcul.
n Numarul de caractere scrise pina in acest moment este memorat la argumentul de tip int . Nu se face nici o conversie.
Se scrie un caracter . Nu se face nici o conversie. Specificatia completa este
Valoare returnata
Functiile returneaza numarul de caractere generate (nu se include caracterul terminator null pentru sprintf
|