Sunteți pe pagina 1din 11

INSTRUCIUNILE LIMBAJULUI C++ 5.

Operaii de intrare/ieire
n C, spre deosebire de alte limbaje, sistemul intrare/ieire nu este parte a limbajului, ci este introdus printr-un set de funcii aflate n biblioteca standard. n exemplele din prima parte a acestei lucrari, se vor utiliza fencia printf, pentru afiare date pe ecran, i funcia scanf, pentru citire date de la tastatur. Cum ambele funcii se afl n fiierul antet stdio.h, toate programele ce utilizeaz aceste funcii trebuie s conin declaraia: #include <stdio.h> 5.1. Funcia printf Funcia printf are urmtorul prototip n fiierul antet stdio.h: int printf(const char *sir_format [, argument, ...]) unde sir_format poate conine caractere i specifictori de format. Efectul acestei funcii const n transferul ctre dispozitivul de ieire a caracterelor i valorilor argumentelor din lista ce urmeaz dup sir_format, dac exist argumente, Transferul valorilor se face conform specificatorilor de format specificai n sir_format. Acetia sunt precedai de caracterul %, iar numrul i tipul lor trebuie s corespund cu numrul i tipul argumentelor. 5.1.1. Afiarea valorilor de tip int Pentru afiarea valorilor de tip int, se folosete specificatorul de format %d. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> void main(void) { int an = 2004; int luna= 10; int zi = 15; printf("DATA este: %d.%d.%d\n", zi, luna, an); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: DATA este:15.10.2004 5.1.2. Afiarea valorilor intregi octale i hexazecimale Pentru afiarea valorilor octale i hexazecimale, se folosesc specificatorii de format %o (litera o nu cifra 0) i, respectiv %x sau %X. Programul de mai jos exemplific utilizarea acestor specificatori de format: #include <stdio.h> void main(void) { int nr=24; printf("Val zecimala %d este:\n\t%o in octal si\n",nr,nr); printf("\t%x in hexazecimal\n",nr);

} Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Val zecimala 24 este: 30 in octal si 18 in hexazecimal 5.1.3. Afiarea valorilor de tip unsigned int Pentru afiarea valorilor de tip unsigned int, se folosete specificatorul de format %u. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> void main(void) { unsigned int nr=44000; printf("Val %u unsigned este %d ca int\n",nr,nr); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Val 44000 unsigned este -21536 ca int 5.1.4. Afiarea valorilor de tip long int Pentru afiarea valorilor de tip long int, se folosete specificatorul de format %ld , %lx , %lo sau %lu pentru ntreg lung zecimal, hexazecimal, octal sau, respectiv, ntreg far semn. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { long int nr=9000000; printf("Val %ld long este %d ca int\n",nr,nr); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Val 9000000 long este 21568 ca int 5.1.5. Afiarea valorilor de tip float Pentru afiarea valorilor de tip float, se folosete specificatorul de format %f. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> void main(void) { float t=3201; printf("%f secunde = %f minute\n",t,t/60); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele:

3201.000000 secunde = 53.350000 minute Observaie: %F nu este considerat specificator de format.

5.1.6. Afiarea valorilor n virgul mobil n format exponenial Pentru afiarea valorilor n virgul mobil n format exponenial, se poate folosi specificatorul de format %e sau %E . Programul de mai jos exemplific utilizarea acestor specificatori de format: #include <stdio.h> void main(void) { float t=3201; printf("%e secunde = %E minute\n",t,t/60); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: 3.201000e+03 secunde = 5.335000E+01 minute 5.1.7. Afiarea valorilor n virgul mobil Pentru afiarea valorilor n virgul mobil, se poate folosi specificatorul de format %g sau %G . n acest caz, printf alege unul din specificatorii %f sau %e , astfel nct s se ofere utilizatorului o afiare ct mai convenabil. Programul de mai jos exemplific aceste aspecte: #include <stdio.h> void main(void) { float t=3201; printf("%g secunde = %G minute\n",t,t/60); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: 3201 secunde = 53.35 minute 5.1.8. Afiarea valorilor de tip double Pentru afiarea valorilor de tip double, se pot folosi specificatorii de format: %lf , %le , %lE , %lg sau %lG. Programul de mai jos exemplific utilizarea acestor specificatorii de format: #include <stdio.h> #include <conio.h> void main(void) { double d=12.3; clrscr();

printf("r=%lf\n",d); printf("r=%le\n",d); printf("r=%lE\n",d); printf("r=%lg\n",d); printf("r=%lG\n",d); getch(); } 5.1.9. Afiarea valorilor de tip long double Pentru afiarea valorilor de tip long double, se pot folosi specificatorii de format: %Lf , %Le , %LE , %Lg sau %LG. Programul de mai jos exemplific utilizarea acestor specificatori de format: #include <stdio.h> #include <conio.h> void main(void) { long double l_d=12.3; clrscr(); printf("d=%Lf\n",l_d); printf("d=%Le\n",l_d); printf("d=%LE\n",l_d); printf("d=%Lg\n",l_d); printf("d=%LG\n",l_d); getch(); } 5.1.10. Afiarea valorilor de tip char Pentru afiarea valorilor de tip char, se folosete specificatorul de format %c. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> void main(void) { char ch=65; printf("Caracterul cu cod %d este \'%c\'",ch,ch); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Caracterul cu codul 65 este 'A' 5.1.11. Afiarea unui ir de caractere Pentru afiarea unui ir de caractere, se folosete specificatorul de format %s. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> void main(void) { printf("Sirul de caractere afisat este:\n");

printf("%s\n","Curs C/C++"); Dup compilare i execuie, pe ecran, se afieaz urmtoarele:

Sirul de caractere afisat este: Curs C/C++ 5.1.12. Afiarea pointerilor (adreselor) Pentru afiarea unei adrese indicate de un pointer, se folosete specificatorul de format %p. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> void main(void) { int x; printf("Adresa variabilei x este %p\n",&x); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Adresa variabilei x este FFF4

5.1.13. Afiarea semnului nainte unei valori Pentru afiarea semnului, plus sau minus, naintea unei valori, se va include caracterul + imediat dup caracterul %, n specificatorul de format. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { int i=-32; float x=-23.5; printf("Modul nr int neg %+d este %+d\n",i,-i); printf("Modul nr real neg %+g este %+f\n",x,-x); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Modul nr int neg -32 este +32 Modul nr real neg -23.5 este +23.500000 5.1.14. Formatarea unei valori ntregi Pentru afiarea unui numr ntreg formatat, adic afiat pe un anumit numr de poziii, se va include numrul respectiv imediat dup caracterul %, n specificatorul de format. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { int i=-32;

printf("i=%3d\n",i); printf("i=%5d\n",i); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: i=-32 i= -32 5.1.15. Afiarea valorilor ntregi precedate de zero Pentru afiarea unui numr ntreg formatat care s conin zerouri n loc de spaii, se va include n specificatorul de format caracterul 0 (cifra zero), ntre caracterul % i numrul de poziii de afiare. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { int i=2; printf("i=%03d\n",i); printf("i=%03d\n",-i); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: i=002 i=-002 5.1.16. Afiarea prefixului pentru valorile ntregi octale i zecimale Pentru afiarea prefixului unui numr ntreg n octal sau hexazecimal, se va include n specificatorul de format i caracterul o (litera o) sau, respectiv, caracterul x sau X, imediat dup caracterul %. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { int nr=24; printf("Val zecimala %d este:\n",nr); printf("\t%#o in octal si\n",nr); printf("\t%#x sau %#X in hexazecimal\n",nr,nr); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Val zecimala 24 este: 030 in octal si 0x18 sau 0X18 in hexazecimal 5.1.17. Formatarea unei valori n virgul mobil

Pentru afiarea unui numr n virgul mobil formatat, adic afiat pe un anumit numr de poziii cu un anumit numr de zecimale, se vor include n specificatorul de format numrul poziiilor de afiare i numrul de zecimale, separate de caracterul punct, imediat dup caracterul %. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { float pi=3.1416; printf("%5.1f\n",pi); printf("%5.2f\n",pi); printf("%5.3f\n",pi); } Dup compilare i execuie, pe ecran, se afieaz urmtoarele: 3.1 3.14 3.142 5.1.18. Formatarea unei valori exponeniale Pentru afiarea unei valori exponeniale formatate, adic afiarea unui numr n format exponenial cu mantisa formatat, afiat pe un anumit numr de poziii cu un anumit numr de zecimale, se vor include n specificatorul de format, imediat dup caracterul %, numrul poziiilor de afiare i numrul de zecimale, separate printr-un punct. Programul de mai jos exemplific utilizarea unui astfel de specificator de format: #include <stdio.h> void main(void) { float pi=3.1416; printf("%8.1e\n",pi); printf("%8.2e\n",pi); printf("%8.3e\n",pi); Dup compilare i execuie, pe ecran, se afieaz urmtoarele: 3.1e+00 3.14e+00 3.142e+00 5.1.19. Alinierea la stnga a valorilor Pentru alinierea la stnga a valorilor afiate, se va include n specificatorul de format caracterul - (semnul minus), imediat dup caracterul %. Programul de mai jos exemplific utilizarea unor astfel de specificatori de format: #include <stdio.h> void main(void) { int i = 3;

float x= 10.3; printf("Aliniere printf("Aliniere printf("Aliniere printf("Aliniere

dreapta stanga dreapta stanga

valoare valoare valoare valoare

i=%7d\n", i); i=%-7d\n", i); x=%7.2f\n", x); x=%-7.2f\n", x);

Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Aliniere Aliniere Aliniere Aliniere dreapta stanga dreapta stanga valoare valoare valoare valoare i= 4 i=4 x= 10.30 x=10.30

5.1.20. Utilizarea combinat a specificatorilor de format Specificatorii de format prezentai mai,sus, pot fi combinai. Programul de mai jos exemplific utilizarea unor astfel de specificatori de format: #include <stdio.h> void main(void) { int i = 1234; printf("Aliniere printf("Aliniere printf("Aliniere printf("Aliniere }

stg stg stg dr

cu cu fara cu

semn semn semn semn

val val val val

i=%+-7d\n", i=%-+7d\n", i=%- 7d\n", i=% +7d\n",

i); i); i); i);

Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Aliniere Aliniere Aliniere Aliniere stg stg stg dr cu cu fara cu semn semn semn semn val val val val i=+1234 i=+1234 i= 1234 i= +1234

5.1.21. Determinarea numrului de caractere afiate Cnd se dorete s se cunoasc numrul de caractere afiate de funcia printf, se plaseaz n irul de format specificatorul de format %n. La ntlnirea unui astfel de specificator, funcia printf va atribui unei variabile, din lista de argumente, numrul de caractere afiate pn la ntlnirea respectivului specificatorul de format. Programul de mai jos exemplific utilizarea unor astfel de specificatori de format: #include <stdio.h> void main(void) { int n1,n2; printf("Determina%n" nr caractere afisate:%n\n", &n1,&n2); printf("n1=%d n2=%d\n",n1,n2);

} Dup compilare i execuie, pe ecran, se afieaz urmtoarele: Determina nr caractere afisate: n1=9 n2=31 5.2. Funcia scanf Funcia scanf are urmtorul prototip n fiierul antet stdio.h: int scanf(const char *sir_format [,lista_adr_arg]); unde sir_format conine specifictori de format pentru fiecare variabil a crui adres se afl n lista lista_adr_arg. n list, adresele sunt separate prin virgul. Specificatorilor de format din sir_format sunt precedai de caracterul %, iar numrul i tipul lor trebuie s corespund cu numrul i tipul argumentelor ale cror adrese sunt specificate n lista_adr_arg. Dac dup caracterul % se introduce un numar intreg n, valoarea citit trebuie s conin cel mult n caractere. 5.2.1. Citirea valorilor ntregi La citirea valorilor ntregi, se pot folosi specifictori de format: %d , %x , %o sau %u pentru ntreg zecimal, hexazecimal, octal sau, respectiv, far semn; %D , %X , %O sau %U (sau %ld , %lx , %lo sau %lu) pentru ntreg lung zecimal, hexazecimal, octal sau, respectiv, far semn. Programul de mai jos exemplific utilizarea unora dintre aceti specificatori de format: #include <stdio.h> #include <conio.h> void main(void) { int n; long int n_l; clrscr(); printf("\nIntroduceti un numar intreg: "); scanf("%d", &n); printf("nr=%d",n); printf("\nIntroduceti un numar intreg lung: "); scanf("%D", &n_l); /* sau */ // scanf("%ld", &n_l); // Daca nr long int este 45000,rezulta printf("nr=%ld\n",n_l); /* nr=45000 */ printf("nx=%lx\n",n_l); /* nx=afc8 */ printf("no=%lo\n",n_l); /* no=127710 */ printf("\nIntroduceti un numar hexa lung: "); scanf("%X", &n_l); /* sau */ // scanf("%lx", &n_l); Daca nr hexa este afc8, printf("nr=%ld\n",n_l); /* rezulta nr=45000*/ printf("\nIntroduceti un numar octal lung: "); scanf("%O", &n_l); /* sau */ // scanf("%lo", &n_l); Daca nr octal este 127710, printf("nr=%ld\n",n_l); /* rezulta nr=45000*/ getch();

} Programul urmtor utilizeaz un specificator de format cu un numr specificat de caractere citite: #include <stdio.h> #include <conio.h> void main(void) { int n; clrscr(); printf("\nIntroduceti un numar intreg: "); scanf("%3d", &n); /* Daca se tasteaza 1234 */ printf("nr=%d",n); /* nr=123 getch(); } 5.2.2. Citirea valorilor reale La citirea valorilor de tip float, se pot folosi urmtorii specificatori de format: %f , %e sau %E, %g sau %G; la citirea valorilor de tip double, se pot folosi specificatorii de format: %lf , %le sau %lE , %lg sau %lG, iar la citirea valorilor de tip long double, se pot folosi specificatorii de format: %Lf , %Le sau %LE , %Lg sau %LG. Programul de mai jos exemplific utilizarea unora dintre aceti specificatori de format: #include <stdio.h> #include <conio.h> void main(void) { float r; double d; long double l_d; clrscr(); printf("\nIntroduceti un numar real: "); scanf("%f", &r); printf("r=%f",r); printf("\nIntroduceti un numar real: "); scanf("%lf", &d); printf("d=%lf",d); printf("\nIntroduceti un numar real: "); scanf("%Lf", &l_d); printf("l_d=%Lf",l_d); getch(); } 5.2.3. Citirea caracterelor Pentru citirea caracterelor, se folosete specifictorul de format %c. Programul de mai jos exemplific utilizarea acestui specificator de format: #include <stdio.h> #include <conio.h> void main(void) { int c1,c2 ;

*/

clrscr(); printf("\nIntroduceti doua caractere:\n"); scanf("%c %c", &c1,&c2); printf("caracterele sunt=%c si %c",c1,c2); getch(); 5.2.4. Citirea irurilor de caractere

Pentru citirea caracterelor, se folosete specifictorul de format %s. Dac dup caracterul % se introduce i un numar intreg n, irul citit s conine cel mult n caractere. Programul de mai jos exemplific utilizarea acestor specificator de format: #include <stdio.h> #include <conio.h> void main(void) { char sir[7]; clrscr(); printf("\nIntroduceti cel mult 7 caract:"); scanf("%s", sir); /* Daca se tasteaza:1234567 */ printf("sir=%8s",sir); /* sir= 1234567 */ printf("\nIntroduceti cel mult 5 caract:"); scanf("%5s", sir); /* Daca se tasteaza:1234567 */ printf("sir=%8s",sir); /* sir= 12345 */ getch(); } 5.2.5. Citirea datelor de tipuri diferite Pentru citirea datelor de tipuri diferite, se pot folosi iruri de format ce conin combinaii ale specifictorilor de format prezentai mai sus. La citire, dup fiecare dat introdus se tasteaz spaiu sau enter. Programul de mai jos exemplific utilizarea unui sir de specificatori de format: #include <stdio.h> #include <conio.h> void main(void) { int zi,an; char luna[3]; clrscr(); printf("\nIntroduceti data (15 nov 2004):"); scanf("%d %3s %d", &zi,luna,&an); printf("Data: %d %s %d",zi,luna,an); getch(); }

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