Sunteți pe pagina 1din 2

Operaii de intrare/ieire cu tastatura/monitorul

Tastatura i monitorul snt dispozitive asimilate fiierelor ASCII, operaiile de intrare/ieire se realizeaz cu conversie ntre reprezentarea intern a datelor (binar: virgul fix, virgul mobil etc.) i cea extern (ASCII). Scrierea pe ecran se desfoar n doi pai: datele din memoria principal (MP) snt convertite n formatul extern de reprezentare (ASCII) i transferate ntr-o zon tampon (pasul 1). De aici snt preluate i afiate pe ecran (pasul 2). La citire datele snt preluate de la tastatur i depuse ntr-o zona tampon (buffer), n format ASCII (pasul 1). De aici se preiau datele necesare, se convertesc n formatul intern i se depun n memoria principal, n zonele corespunztoare parametrilor funciilor de citire. Se observ c operaia de conversie are loc numai la transferul ntre zona tampon i memoria principal. n general, n zona tampon datele snt pstrate n acelai format cu dispozitivul asociat Datorit orientrii spre portabilitate, n C nu au fost implementate instruciuni de intrare/ieire. Operaiile de intrare/ieire se realizeaz prin apelul unor funcii de bibliotec . Cele mai des utilizate funcii de bibliotec pentru afiarea datelor snt: printf, puts, putch. La acestea se adaug macroul putchar. Cele mai des folosite funcii de bibliotec pentru citirea datelor de la tastatur snt: scanf, gets, getch, getche. La acestea se adaug macroul getchar. Funciile printf i scanf snt numite funcii de intrare/ieire cu format (folosesc descriptori de format). Pentru utilizarea acestora, trebuie incluse explicit n programul surs head-ere, prin directiva #include: #include <stdio.h> sau #include <conio.h> Utilizatorul i poate defini propriile funcii de intrare/ieire dac cele predefinite nu corespund necesitilor. Funciile de intrare/ieire cu format au urmtoarea structur a parametrilor: (<sir descriptor>, <list de intrare/ieire>) Fiecrui element din lista de intrare/ieire a operaiei de citire/scriere trebuie s-i corespund un descriptor de format n irul descriptor. Descriptorii de format se pun n coresponden cu elementele listei de intrare/ieire de la stnga la dreapta. Exemplu: int a,b; printf("nr1=%i, nr2=%i ",a,b); irul de format este ncadrat ntre ghilimele (este ir de caractere) i conine descriptorii de format. n cazul funciilor de afiare, descriptorii de format pot fi intercalai ntr-un text care va fi afiat. Fiecrui descriptor de format trebuie s-i corespund exact un element din lista de intrare/ieire. Pentru operaiile de citire/scriere cu format, se folosesc funciile: printf(<sir_descriptor>,<expresie1>,<expresie2> ...); scanf(<sir_descriptor >,<adresa1>,<adresa2> ...); Ambele funcii snt definite n biblioteca standard stdio.h.

La operaii de intrare/ieire cu tastatura/monitorul apelul printf transfer valori care vor fi afiate, iar apelul scanf transfer adrese ale variabilelor ale cror valori se vor citi. De aceea, la apelul funciei printf, parametrii reali pot fi variabile, constante, expresii sau apeluri de funcii care returneaz valori, n timp ce la apelul funciei scanf, parametrii reali trebuie s fie adresele variabilelor ale cror valori se citesc (adresele unde se depun valorile citite de la tastatur ). Deoarece limbajul C permite transferul parametrilor numai prin valoare, n cazul funciei scanf trebuie transmise explicit adresele variabilelor. n acest scop se folosete operatorul &, care extrage adresa unei variabile. Funcia printf returneaz numrul de octei (caractere) afiate n caz de succes sau -1 n caz de eroare. Parametrul <sir_descriptor> al funciei printf poate conine caractere care se afieaz ca atare i coduri de format care definesc conversiile care se aplic asupra obiectelor precizate. Funcia scanf returneaz numrul de cmpuri corect procesate. Parametrul <sir_descriptor> poate conine, n afara codurilor de conversie, caractere care vor trebui introduse ca atare de la tastatur n cadrul cmpului respectiv. Exemplu: dac irul descriptor conine secvena x=%d, atunci de la tastatur trebuie introdus x=<valoare> Limbajul C are funcii de intrare/ieire dedicate lucrului cu iruri de caractere. Funcia gets se apeleaz astfel: gets(masiv_de_caractere); unde masiv_de_caractere este adresa unde se va depune irul de caractere citit (numele vectorului de caractere). Funcia gets este folosit pentru introducerea de la tastatur a unui ir de caractere.. Funcia puts se apeleaz astfel: puts(sir), unde sir este o expresie de tip pointer spre caracter. Funcia puts este folosit pentru afiarea unui ir de caractere pe ecran. Ea returneaz codul ASCII al ultimului caracter afiat, n caz de succes, sau 1 n caz de eroare. Funciile gets i puts snt definite n biblioteca stdio.h. Funciile getch i getche sunt destinate citirii unui caracter de la tastatur. Ele nu au parametri i returneaz codul ASCII al caracterului citit. Deosebirea dintre ele const n faptul c citirea cu getch se realizeaz fr ecou pe ecran (caracterul corespunztor tastei apsate nu este afiat pe ecran). La apelul funciei getche, pe ecran apare caracterul corespunztor tastei apsate. Funcia putch are ca parametru o valoare ntreag i are ca efect afiarea caracterului ASCII corespunztor (vezi exemplul urmtor). Ea returneaz codul ASCII al caracterului afiat. Macro-urile getchar i putcharsunt definite n biblioteca stdio.h i se apeleaz ca i funciile getch i putch. Diferena const n modul de execuie astfel : macroul getchar permite citirea cu ecou pe ecran a caracterelor de la tastatur iar macroul putchar are ca parametru o expresie al crei rezultat reprezint codul ASCII al caracterului care se dorete s fie afiat.

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