Sunteți pe pagina 1din 5

Intrri/ieiri - Lucru cu iere n C

n general prin ier se nelege o colecie ordonat de elemente, numite nregistrri. Fiecare ier are o nregistrare care marcheaz sfritul de ier. n cazul ierelor introduse de la tastatur, sfritul de ier se genereaz prin secvena: <CTRL>+Z

Operaii standard :
deschiderea unui ier citirea nregistrrilor unui ier actualizarea unui ier adugarea de nregistrri la un ier poziionarea ntr-un ier tergerea unui ier

Pentru a lucra cu un ier n C, se utilizeaz o variabil de tip pointer ctre structura FILE . Aceast structur, mpreun cu funciile specice sunt definite n ierul stdio.h .

Deschiderea unui ier : se realizeaz cu ajutorul funciei


FILE* fopen(const char* cale, const char* mod);

unde: calea - este un pointer spre un ir de caractere care conine calea ctre ierul care se deschide mod - este un pointer spre un ir de caractere care denete modul de prelucrare. Modul de prelucrare:
"r" - deschidere pentru citire (read) "w" - deschidere pentru scriere (write) "a" - deschidere pentru adugare (append) "r+" - deschidere pentru modicare (citire/scriere)

"rb" - deschidere pentru citire binar "wb" - deschidere pentru scriere binar "r+b" - deschidere pentru citire/scriere binar

n caz de eroare la deschidere funcia returneaz NULL.

nchiderea unui ier : se realizeaz cu ajutorul funciei


int fclose(FILE* nume);

Pentru a nchide toate ierele deschise la un moment dat se poate utiliza funcia
int fcloseall();

Exemplu :
#include <stdio.h> void main() { FILE *fisier; char*nume; gets(nume); if(!(fisier=fopen(nume,"r"))) printf("eroare la deschidere"'); /*diverse instruciuni */ fclose(fisier);
}

Citirea i scrierea n ier :


1. Funcia int fgetc(FILE *fisier) - returneaz urmtorul caracter din ier sau EOF. 2. Funcia int fputc(int c, FILE *fisier) - scrie un caracter n ier. 3. Funcia char* fgets(char*s, int n, FILE* fisier) - citete un ir de caractere de lungime maxim n i l depune n variabila s. Citirea caracterelor se ntrerupe la ntlnirea caracterului '\n' sau dac s-a ajuns la maximul de caractere permise (adic n). 4. Funcia int fputs(const char* s, FILE *fisier) - scrie n ier irul de caractere s. 2

5. Funcia int fprintf(FILE*fisier, const char*format,...) - scriere cu format n ierul fisier. 6. Funcia int fscanf(FILE*fisier, const char*format,...) - citire cu format din ierul fisier . 7. Funcia size_t fread(void*p,int nb,int lb,FILE* fisier) - citire a nb blocuri de lungime lb din ierul fisier , care se depun la dresa de memorie p. Se returneaz numrul de blocuri citite din ier 8. Funcia size_t fwrite(void*p,int nb,int lb,FILE* fisier) - scriere a nb blocuri de lungime lb n ierul fisier , de la dresa de memorie p. Se returneaz numrul de blocuri scrise din ier Vericarea dac s-a ajuns la sfrit de ier: int feof(FILE *fisier); Salt n ier: int fseek(FILE *fis,long n,int poz); unde poz poate :
SEEK_SET sau 0 - de la nceputul ierului SEEK_CUR sau 1 - de la poziia curent SEEK_END sau 2 - de la sfritul ierului.

Exemplul 1 : Citirea unui text dintr-un ier caracter cu caracter i aarea


pe ecran.
#include <stdio.h> void main() { FILE *fisier; char nume[255], c; printf("numele fisierului"); gets(nume); if(!(fisier=fopen(nume,"r"))) printf("eroare la deschidere"); else do { c=fgetc(fisier); putchar(c); } while(!feof(fisier)); fclose(fisier); }

Exemplul 2 : Se consider un ier care conine valorile unei matrice n

modul urmtor: pe prima line se specic numrul de linii i de coloane, iar pe ecare linie succesiv se a valorile (ntregi) din linia corespunztoare n matrice. S se citeasc elementele din ier ntr-o matrice A.
#include <stdio.h> #include <malloc.h> void main() { FILE *fisier; char nume[255]; int m,n, **A,i,j; gets(nume); if(!(fisier=fopen(nume,"r"))) printf("eroare la deschidere"); else { fscanf(fisier,"%d %d",&m,&n); A=(int**)malloc(m*sizeof(int*)); for(i=0;i<m;i++) { A[i]=(int*)malloc(n*sizeof(int)); for(j=0;j<n;j++) fscanf(fisier,"%d",&A[i][j]); } fclose(fisier);
}

Probleme propuse (INFO)


1. S se citeasc dintr-un ier de stundeni datele despre acetia (nume, prenume, numar matricol, 3 note) i s se introduc ntr-un nou ier doar acei studeni care au media de trecere (5). 2. S se scrie o funcie care concateneaz un numr variabil de iere.

Probleme propuse (MI)


1. S se citeasc dintr-un ier de stundeni datele despre acetia (nume, prenume, numar matricol, media) i s se aeze pe ecran. 2. S se citeasc n iruri de caractere i s se scrie ntr-un ier, cte 5 pe un rnd.