42 0 195KB
Funcțiile printf() și scanf() Limbajul C utilizează pentru introducerea și afișarea datelor funcțiile scanf() și printf() cuprinse în biblioteca stdio.h. Astfel, datele sunt preluate de la tastatură cu ajutorul functiei scanf() și, după prelucrare, afișate pe ecran prin intermediul funcției printf(). Funcția printf() preia valori întregi sau reale pe care le transformă în șiruri de caractere afișate apoi pe ecran. Această funcție cuprinde două sau mai multe argumente, primul fiind un șir de caractere prin care se precizează tipul de variabilă, urmat de celelalte argumente ce reprezintă variabilele in cauză. Descriptorii de format (descriptorii de tip) cuprinși în primul argument pot fi: %c – caracter (char); printf("Afiseaza caracterul %c",'a'); %s – şir de caractere încheiat cu caracterul ‘\0’ (string); printf("Afiseaza un sir de %s","caractere"); %d – întreg cu semn (int); printf("Afiseaza un intreg cu semn %d", 314); %u – întreg fără semn (unsigned int); printf("Afiseaza un intreg fara semn %u", 314); %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); printf("Afiseaza un intreg in baza 16 fara semn %x", 314); %X – la fel ca %x, numai că cifrele în hexazecimal pentru 10, 11, 12, 13, 14, 15 sunt litere mari; printf("Afiseaza un intreg in baza 16 fara semn %X", 314); %o – întreg în baza 8 fără semn (int); printf("Afiseaza un intreg in baza 8 fara semn %o", 314); %f – real pe 6 octeţi (float), notaţie zecimală (fără exponent); printf("Afiseaza o valoare reala, notatie zecimala %f", 3.14); %e – real pe 6 octeţi (float), notaţie exponenţială, ştiinţifică (litera e de la exponent este mică); printf("Afiseaza o valoare reala, notatie exponentiala %e", 3.14); %E – la fel ca %e, numai că pentru litera de la exponent este mare; printf("Afiseaza o valoare reala, notatie exponentiala %E", 3.14); %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; printf("Afiseaza o valoare reala, notatie exponentiala sau zecimala %g", 3.14); %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; printf("Afiseaza o valoare reala, notatie exponentiala sau zecimala %G", 3.14); %p – adresa în hexazecimal (pentru pointeri). Acestor descriptori li se pot adăuga convertori precum l, care reprezintă long pentru întregi și float pentru valori reale,ll pentru long long int, h marcheaza short int, hh reprezintă signed char, iar L contribuie la afișarea valorilor de tip long double: %ld – întreg lung (pe 4 octeţi) cu semn (long); %lu – întreg lung (pe 4 octeţi) fără semn (unsigned long); %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. Descriptorii de tip pot conține specificări în privința preciziei, lungimii, orientării si altor caracteristici astfel: %-(tip_data) - semnul minus marchează încadrarea la stânga; printf("%-d",314); %+(tip_data) - semnul plus forțează afișarea semnului chiar și înaintea unei valori pozitive; printf("%+d",314); % (tip_data) - spațiul este afișat în locul semnului în cazul valorilor pozitive; printf("% d",314); %(număr)(tip_data) - numărul are rolul de a specifica lungimea minimă a șirului afișat; printf("%10d",314); %*(tip_data) – lungimea minimă este dată de argumentul următor de tip int; printf("%*d %d",3,14); %0(număr)(tip_data) - rezultatul este precedat de zerouri în loc de spații pentru a atinge lungimea minimă precizată; printf("%010d",314); %.(număr)(tip_data) - punctul urmat de un număr face referire la numărul cifrelor de după virgulă; printf("%.10d",314); %.*(tip_data) – numărul cifrelor de după virgulă este dat de argumentul următor de tip int; printf("%.*d %d",3,14); %#g și %#G - zerourile din încheiere nu sunt eliminate; %#f, %#F, %#e, %#E, %#g și %#G - rezultatul va conține mereu virgulă; %#0, %#x, %#X - valoarea afișată va fi completată cu 0, 0x respectiv 0X. Functia printf() face parte dintr-o familie de funcții care cuprinde și: - Funcția vprintf() afișează, de asemenea, în stdout, fișierul standard de ieșire; - Funcțiiile fprintf() și vfprintf() se diferențiază de funcția printf prin faptul că transmit rezultatul într-un fișier precizat; - Funcțiile sprintf(), snprintf(), vsprintf() și vsnprintf() tipăresc rezultatul într-o zonă de memorie in loc să îl afișeze pe ecran; - Funcția vsnprintf() este similară funcției sprintf, însă nu acceptă un număr ilimitat de parametri ci acceptă un pointer către lista de argumente și acceptă un parametru în plus numit size (maximul de caractere care vor fi scrise);
-
Funcțiile asprintf() și vasprintf() generează dinamic noi string-uri.
Funcția scanf() citește datele de la fișierul standard de intrare, le interpretează conform primului argument care conține descriptori de format și le memorează în argumentele următoare. Primul argument, numit sirul de control, conține aceiași descriptori de tip și convertori ca funcția printf(). Din familia acestei funcții mai fac parte și: - Funcțiile fscanf() și vfscanf() care primesc date de la un flux (stream) precizat; - Funcția sscanf() și vsscanf() își citesc datele dintr-un șir de caractere.